面试题 001 - xmfenbei/study-javascript GitHub Wiki

问题:

(function() {
    var a = b = 5;
})();

console.log(b);

请问控制台上会输出什么?

答案:

输出:5

解析:

这一题的陷阱是,在函数表达式中有两个赋值,但a是用关键字var来声明的,这意味着a是局部变量,而b则被赋予为全局变量。

这一题的另一个陷阱是,它并没有使用严格模式(use strict)。在函数里面,如果启用了严格模式,代码就会报错:“Uncaught ReferenceError: b is not defined”。请记住,严格模式需要你显式地引用全局作用域,代码应该写成:

(function() {
    'use strict';
    
    var a = window.b = 5;
})();

console.log(b);