一道有意思的JS面试题

var name = "The Window";
var object = {
  name :"My Object",
  getNameFunc:function(){
     return function(){
  return this.name
}
  }
}
console.log(object.getNameFunc()());




这道题答案就是:The Window


我也毫不犹豫的掉进坑里面了-- 苦闷啊 其实这种情况有些人会经常遇到就是会用 


var _this = this


我相信这行代码你一定写过


先说一下函数:函数是一种特殊的对象,这个特殊的对象就是window对象,


试试以下代码:
 var tt = 10;
 sss = 100;
 function dd(){
    console.log(this);
  }
  dd();
输出的则是:window对象


那这个时候上面就不难理解了:


return function(){ 
   this.name
}


这个是一个匿名函数不是object对象的属性和成员函数,则匿名函数中的this指向的肯定是window


对象了,this.name 相当于 window.name  上面的那么定义的变量name 是迷惑你的,输出的是 




name: "The Window"  在不明白就去查资料吧:主要看下js函数对象和闭包吧


看下一下代码:
var name = "The Window";
var object = {
  name :"My Object",
  getNameFunc:function(){
     var _this = this
     return function(){
  return _this.name
}
  }
}
console.log(object.getNameFunc()()); //输出:My Object


总结:其实也就是this的指向问题

你可能感兴趣的:(javascript)