FE-Interview
FE-Interview copied to clipboard
Day6:写出执行结果,并解释原因
(function () {
var a = (b = 5);
})();
console.log(b);
console.log(a);
// 写出执行结果,并解释原因
每日一题会在下午四点在交流群集中讨论,五点小程序中更新答案 欢迎大家在下方发表自己的优质见解 二维码加载失败可点击 小程序二维码
扫描下方二维码,收藏关注,及时获取答案以及详细解析,同时可解锁800+道前端面试题。

答案 5 Error, a is not defined
解析
在这个立即执行函数表达式(IIFE)中包括两个赋值操作,其中a
使用var
关键字进行声明,因此其属于函数内部的局部变量(仅存在于函数中),相反,b
被分配到全局命名空间。
另一个需要注意的是,这里没有在函数内部使用严格模式(use strict
;)。如果启用了严格模式,代码会在输出 b 时报错Uncaught ReferenceError: b is not defined
,需要记住的是,严格模式要求你显式的引用全局作用域。因此,你需要写成:
(function () {
"use strict";
var a = (window.b = 5);
})();
console.log(b);
再看一个
(function() {
'use strict';
var a = b = 5;
})();
console.log(b); //Uncaught ReferenceError: b is not defined
/*---------------------------*/
(function() {
'use strict';
var a = window.b = 5;
})();
console.log(b); // 5
(function() { 'use strict'; var a = b = 5; })();
console.log(b); 但是在chrome控制台,输出的也是5 ???
(function() { 'use strict'; var a = b = 5; })();
console.log(b); 但是在chrome控制台,输出的也是5 ???
您应该是运行过上一段代码,保留着全局的 b 变量。 换一个变量名就可以得出正确结果了