前端面试题1

198 阅读1分钟

问题: 作用域(Scope)

(function() {
     var a = b = 5;
 })();
 consol.log(b);//5
 cnsole.log(a)//ReferenceError: a is not defined

这个问题的陷阱就是,在立即执行函数表达式(IIFE)中,有两个赋值,但是其中变量a使用关键词var来声明。这就意味着a是这个函数的局部变量。与此相反,b被分配给了全局作用域(译注:也就是全局变量)。

这个问题另一个陷阱就是,在函数中没有使用”严格模式” ('use strict';)。如果 严格模式开启,那么代码就会报错 ” Uncaught ReferenceError: b is not defined” 。请记住,如果这是预期的行为,严格模式要求你显式地引用全局作用域。

(function() {
    'use strict';
     var a = b = 5;
 })();
 console.log(b);//ReferenceError: b is not defined