面试题 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);