js变量提升和函数提升
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,变量,作为编程语言最基础的部分,每种语言的变量不尽相同,但又大径相庭。大部分编程语言的变量有块级作用域,如if、for、while... 但JavaScript不纯在块级作用域,而是函数作用域,并且有
千家信息网最后更新 2026年10月31日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安全错误
数据库的锁怎样保障安全
哈尔滨大商圈互联网科技有限公司
中关村互联网 科技集团
互联网科技巨头监管
互联网科技公司税收优惠
奇酷互联网科技
互联网科技股票
紫鲸互联网科技
深圳齐家互联网科技
互联网高科技企业
天扬科技互联网广告
广州慧亚互联网科技怎么样
宁夏科技产业互联网案例
宝灵互联网科技有限公司
高科技互联网发展前景如何
群盈汇互联网科技有限公司
云南省自由互联网科技有限公司
全球科技与互联网公司市值变化
吉林省码上互联网科技电话
互联网科技创新方面的资料
山东亿川互联网科技有限责任公司
湖南永感互联网科技有限公司
互联网 科技创新
互联网科技股票
迪茉互联网科技
互联网科技大会案例
互联网科技公司的市场部门
欧洲十大科技互联网公司
来此购互联网科技有限公司
恒生互联网科技业指数调整周期
中天科技中国工业互联网