js代码输出内容

时间:2021-6-12 作者:qvyue
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分号的重要性

声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:qvyue@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。