var test = (function(a){ this.a = a;return function(b){ return this.a + b; } } (function(a,b){ return a; }(1,2)) ); console.log(test(4));
昨天面试遇到这个题,当时答错了,回来运行了一遍是5,又仔细看了看,原来如此,现分析如下,
(funtion(a,b){
return a;
}(1,2))这段代码 是1
因而 test可以简写为 var test=(function(a){
this.a=a;
return function(b){
return this.a+b;
}
}(1))
1带入test中 所以 this.a 是1 然后 console.log中test(4)带入4,b就为4.所以运行结果为5;
(function(){ var a=b=3; })(); console.log(typeof a === 'undefined'); console.log(typeof b === 'undefined');
var a = b = 3; 实际上是:
b = 3;
var a = b;
因此,b最终成为一个全局变量(由于它不在var关键字之前),并且仍然在范围内,甚至在封闭函数之外。
a未定义的原因是a是自动执行匿名函数的局部变量
所以第一个console.log是true,第二个是false;