1. 请写出弹出值,并解释为什么
+function(){
alert(a);
a();
var a = function(){
console.log(1);
}
function a(){
console.log(2);
}
alert(a);
a();
var c= d=a;
}
alert(d);
alert(c);
考点
- IIFE,闭包
- 变量和函数的提升,此时函数的的名字也是a,变量也是a,所以会造成
function a(){}
,var a
。此时var a
因为未被定义所以被忽略了。所以顶部的输出值是2和2,接下来输出1 和 1,是因为函数的提升要比变量的提升更前。局面就是var a, function a(){}
,a=function(){}
- 变量和函数的提升,此时函数的的名字也是a,变量也是a,所以会造成
- 作用域和连等的问题,此时
var c=d=a
。实际是d=a, var c=d
,在非严格模式下 c是undefined,严格模式下,c报错。
- 作用域和连等的问题,此时
扩展题
var a ={n:1}
var b=a;
a.x=a={n:2};
console.log(a.x);// undefined
console.log(b.x);// {n:2}