11-26变量提升

浏览器引擎在解释JS代码之前,会对JS代码进行编译,其中一部分工作就是声明提升,也就是找到所有的声明,包括变量声明和函数声明都会被找到并在代码块执行前被处理。

比如var i = 0;这句话会被浏览器解读成var i和i = 0两句话执行。
其中var i会在编译阶段就会先执行,而i=0这段赋值代码会在原地等待执行。

那么函数声明的提升,包括函数的代码块都会被一起提升,所以咱们在调用函数的时候,函数声明已经被执行过了。

当函数声明和变量声明在一起时,函数声明提升在前,变量提升在后

严格来讲,let 也会提升,但由于“暂时性死区”(temporal dead zone),实际上不能在声明之前使用 let 变量。因此可以简单地记作 let 声明的变量不发生声明提升。

add(1, 2);  // TypeError: add is not a function
var add = function(num1, num2) {
    console.log(num1 + num2);
};  // 报错原因:add 被当作变量提升了,而非被当作函数提升。
  • let/const: 声明提升, 默认值是 undefined, 赋值之前不能用-- 处于 ***\*暂存死区\**** 状态

  • let /const 声明的变量存储在 与 window 同级别的脚本区 ,没有全局污染

  • 由于var在全局声明变量, 自定义的变量存储在window作用域中, 污染了系统提供的 window对象

  • 同名会覆盖 window 中原有属性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值