《你不知道的javascript》--读书笔记(4)

提升

JavaScript代码在执行时是由上到下一行一行执行的,这种说话不完全正确。

包括变量和函数在内的所有声明都会在任何代码被执行之前首先被处理

如下例:

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

所以这里首先被执行的是'var a;'
console.log(a)//undefinded

var a = 2;

var a = 2;可以看做是var a,
a = 2,两个声明

上述例子的现象的过程就好像变量和函数声明从它们代码中出现位置“移动”到最上面,此过程叫做提升。

只有声明本身会被提升,赋值或者其他运行逻辑会留在原地。

foo()

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

var foo = function bar(){
    //...
}

变量标识符foo()被声明提升分配给所在的作用域,但当执行foo(),并未赋值,所以抛出异常。

结论:函数声明会被提升,函数表达式不会被提升

函数会首先被提升,然后才是变量。

foo(); // 1

var foo;//重复的声明,被忽略。

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

小结

  • var a = 2,JavaScript引擎将其当做var a ,a = 2,两个单独的声明。

  • 无论作用域中的声明出现在什么地方,都将在代码本身被执行前首先进行处理。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值