js变量提升和函数提升
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,变量,作为编程语言最基础的部分,每种语言的变量不尽相同,但又大径相庭。大部分编程语言的变量有块级作用域,如if、for、while... 但JavaScript不纯在块级作用域,而是函数作用域,并且有
千家信息网最后更新 2025年12月02日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安全错误
数据库的锁怎样保障安全
锦州app软件开发公司
从网络技术看青春电影
中国航天科技大学国际工业互联网
test注解会影响数据库吗
池州市软件开发
怎么连外国服务器视频
怎样用n11修改数据库
产业互联网和金融科技主战场
原神服务器什么时候开服
网络技术费用一般记什么科目
qq代理服务器安全吗
数据库自动备份命令
网络安全保障工作方案的总结
制度网络安全审计损失
物料主数据库字段名
浙江软件开发服务电话
计算机网络技术专业课程表
pdb蛋白质数据库介绍
facebook 网络安全
教育部关于网络安全工作的通知
东方通连接mysql数据库配置
软件开发简历社会经历
git软件开发实战豆瓣
海康录像存储服务器保存天数设置
怎么把云服务器变成云桌面
何为地形图数据库
在mysql建立数据库步骤
js下载服务器静态文件
中专网络技术考什么证书
阿里云服务器的公网ip