js变量提升和函数提升
发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,变量,作为编程语言最基础的部分,每种语言的变量不尽相同,但又大径相庭。大部分编程语言的变量有块级作用域,如if、for、while... 但JavaScript不纯在块级作用域,而是函数作用域,并且有
千家信息网最后更新 2024年09月22日js变量提升和函数提升
变量,作为编程语言最基础的部分,每种语言的变量不尽相同,但又大径相庭。大部分编程语言的变量有块级作用域,如if、for、while... 但JavaScript不纯在块级作用域,而是函数作用域,并且有自己独有的特性--变量提升。(ES6新添加的let、const使其可以用块级作用域)
对于函数的变量访问时遵循作用域链的,即当前函数运行时会有一个当前作用域,当饮用某个变量时,会先查找当前作用域内是否存在该变量的定义,如果不存在则根据作用域链向上去查找父函数的作用域,有则拿来使用,没有则继续向上直到全局作用域。关于作用域链这里就不仔细描述,简单而言,类似原型链,从全局函数直到当前函数的作用域存在一种相互包含的关系,子可以向上访问,但是父不可以向下访问子函数的变量,这样层层嵌套的关系链。
作用链域如下:
var num = 10; function a (){ console.log(num); } a() ; //结果alert(10),a函数作用域里没有num 所以向上查找外层的作用域,有且等于10所以弹出10而不是undefined.
变量的提升:
var num = 10; function a (){ //var num; console.log(num); var num = 11; //num = 11; } a(); // undefined
这段代码中,function a(){}里的var num = 11;就拆分等价于被注释掉的蓝色部分,这就是变量提升--所有的变量都事先被提升到所属函数作用域的头部声明。
再来看看有关函数形参的问题,第一段代码稍加改动:
var num = 10; function a (num){ console.log(num);
} a() ; //结果undefined,a函数作用域定义形参num,由于没赋值,所以为undefined
函数的提升:
函数的声明方式有俩种:函数声明和函数表达式,在函数提升方面会有所不同
函数声明的函数提升:
console.log(fn); //function fn(){console.log(1);}
function fn(){ console.log(1);}
等同下面一段代码:
function fn(){
console.log(1);
}
console.log(fn); //function fn(){console.log(1);}
函数声明中,声明的函数整体被提升到作用域最顶部。
函数表达式的函数提升:
console.log(fn); // undefinedvar fn = function (){ console.log(1); }
等同下面一段代码:
var fn;
console.log(fn); // undefined
fn = function (){
console.log(1);
}
函数表达式中,类似于上面讲的变量提升,var出来的变量被提到作用域最顶部声明。
函数
作用
变量
代码
表达式
语言
全局
结果
编程语言
部分
顶部
形参
编程
不同
相同
原型
基础
外层
大部分
头部
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
舟山应用软件开发成本预算表
广元网络技术哪家好
将时间最小值存入数据库
打电话给别人显示无法连接服务器
冯登国网络安全技术
我们所面临的网络安全问题
青岛数据分析软件开发
2019黑龙江网络安全周
警惕网络安全犯罪
网络安全专项检查记录表
腾讯邮箱添加邮箱服务器设置
软件开发发展建议
千年沧海服务器
核算服务器放云平台
移动云 云数据库
海西州软件开发优化价格
网络安全晨会分享
金龙数据库
委托软件开发帐务处理
mac服务器断开
本香世界服务器忙什么意思
软件开发岗位需要的工具
第七次人口普查数据库考试
海南创新服务器
垃圾邮件服务器查询
网络安全取队名
太仓网络技术咨询包括什么
无法连接服务器安全模式
爱商网络技术
软件开发测试原因