js提升

提升

变量和函数声明从它们在代码中出现的位置被“移动”到了最上面,这叫变量的提升。分为两个部分,第一部分是将所有的变量声明和函数声明放在了代码的最上方,第二部分的代码运行到指定位置时再执行。

直觉上会认为js代码在执行时是由上到下一行一行执行的,但实际上这并不完全正确
考虑一下代码

a = 2;
var a;
console.log(a)

很多人会认为是undefined,因为var a 在a = 2之后,认为变量会重新赋值,但是实际输出结果是2
上面的代码等价于
var a;
a = 2;
console.log(a);

考虑另外一段代码

console.log(a);
var a = 2

你可能会认为会输出2或者认为会抛出ReferenceError异常,但是实际是会输出undefined。

这是因为变量a都会在最开始就声明,这个过程就好像变量和函数声明从他们在代码中出现的位置被“移动”到最上面,这个过程叫作“提升”。

函数也会存在提升

foo();
function foo(){
   console.log(a);
   var a=2;
}

相当于

function foo(){
 var a;
 console.log(a);
 a=2;
}
foo();

但是需要注意的一点是函数声明会提升,但是函数表达式却不会被提升
比如
foo();
var foo = function bar(){
//代码
}

会报错,但是是TypeError而不是ReferenceError 因为表达式不会被提升,最开始会声明 var foo;所以对变量进行函数调用就会报错

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值