FE-Interview icon indicating copy to clipboard operation
FE-Interview copied to clipboard

Day6:写出执行结果,并解释原因

Open Genzhen opened this issue 4 years ago • 3 comments

(function () {
  var a = (b = 5);
})();
console.log(b);
console.log(a);
// 写出执行结果,并解释原因

每日一题会在下午四点在交流群集中讨论,五点小程序中更新答案 欢迎大家在下方发表自己的优质见解 二维码加载失败可点击 小程序二维码

扫描下方二维码,收藏关注,及时获取答案以及详细解析,同时可解锁800+道前端面试题。

Genzhen avatar Jun 22 '20 12:06 Genzhen

答案 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

Genzhen avatar Jun 22 '20 12:06 Genzhen

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

console.log(b); 但是在chrome控制台,输出的也是5 ???

GengHH avatar Oct 25 '21 23:10 GengHH

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

console.log(b); 但是在chrome控制台,输出的也是5 ???

您应该是运行过上一段代码,保留着全局的 b 变量。 换一个变量名就可以得出正确结果了

youkoucoding avatar Nov 16 '21 05:11 youkoucoding