前端面试题部分总结

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;

 

posted @ 2017-07-20 10:43  jolee  阅读(108)  评论(0编辑  收藏  举报