JS

作用域&js分号的作用

2021-05-19  本文已影响0人  3e2235c61b99
var b = 10;
(function b(){
    b = 20;
    console.log(b);
})();

以上代码输出为:

ƒ b(){
    b = 20;
    console.log(b);
}

原因:
作用域:执行上下文中包含作用域链
在理解作用域链之前,先介绍一下作用域,作用域可以理解为执行上下文中申明的变量和作用的范围;包括块级作用域函数作用域
特性:声明提前:一个声明在函数体内都是可见的,函数声明优先于变量声明;
在非匿名自执行函数中,函数变量为只读状态且无法修改(非匿名自执行函数,函数名只读)
把上面的代码做一些小改动,可以实现输出10和20

var b = 10;
(function b(){
    var b = 20;
    console.log(this.b);    // 10, 此处this为window对象,所以this.b 就是window.n
    console.log(b);         // 20
})();

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

上面的代码可以正常输出5,但是下面的代码不能正常执行,会报错5 is not a function,原因是var a = 5后面没有加;,javascript解析器把5当成了一个函数去解析

var a = 5
(function() {
    console.log(a)
})()

上面的代码被解析为:

var a = 5(function() {
    console.log(a)
})()

其中function() { console.log(a) }被当成了函数5的参数,所以会报错
以上参考自 js分号的重要性

上一篇下一篇

猜你喜欢

热点阅读