// 考题二,考变量提升和没有块级作用域: console.log(a); if ('a' in window) { var a = 10; } console.log(a); // 考题三,考函数作用域: if ('a' in window) { (function(){ var a = 10; }()); } console.log(a);
1 回答

互换的青春
TA贡献1797条经验 获得超6个赞
1、先说考题2,在javascript中是没有块级作用于的,也就是说,题中的代码等同于一下代码:
console.log(a); var a; if ('a' in window) { a = 10; } console.log(a);
另外,使用var声明的变量和使用function声明的函数在执行之前会被前置,所以题中代码等同于一下代码:
var a; console.log(a); if ('a' in window) { a = 10; } console.log(a);
而var a;声明变量可以认为相当于在window上注册了a变量:window.a。所以就这样了
2、考题3是吧var a = 10 ;放到了一个闭包里面:
(function(){ var a = 10; }());
这是一个函数,javascript中是有函数作用域的,所以a的声明是无法提出来到外面的,在外面也无法引用到a,所以执行结果会报错。
添加回答
举报
0/150
提交
取消