Rumah  >  Soal Jawab  >  teks badan

javascript - 关于闭包的问题,一个前端面试题(经典)

var name = "The Window";
  var object = {
    name : "My Object",
    getNameFunc : function(){
      return function(){
        return this.name;
     };
    }
};
alert(object.getNameFunc()()); //The Window。谁知道这个为什么会打印this window吗?对闭包不是很熟悉,请教你们一下。为什么调用的时候是window这个对象来调用的呢?

怪我咯怪我咯2750 hari yang lalu1169

membalas semua(16)saya akan balas

  • 黄舟

    黄舟2017-04-10 15:20:28

    var name = "The Window";
      var object = {
        name : "My Object",
        getNameFunc : function(){
            //如果在这里 return this.name; 
            //log ‘My Object’
            //如果要在下面的function拿到‘My Object’
            //就要用另一个变量将this传递给另一个执行环境
            // that = this; 请看下面一段代码
          return function(){
            return this.name;
         };
        }
    };
    alert(object.getNameFunc()()); //The Window。
    

    传递this


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

    balas
    0
  • 大家讲道理

    大家讲道理2017-04-10 15:20:28

    这个问题很简单,就是this的指向问题,如果楼主用一个self变量来储存object,就可以了
    var name = "The window";
    var object={
    name:"My Object",
    getName: function(){
    var self = this;
    return function(){
    return self.name;
    }
    }
    }

    console.log(object.getName()());
    

    balas
    0
  • 怪我咯

    怪我咯2017-04-10 15:20:28

    这个题目重点在于this的执行环境

    obj.getNameFun()可以转换成
    function() {
    return this.name;
    }
    这个函数已经跟obj无关
    而this是随着执行环境(局部,全局,apply,call,setTimeout)等,变化着它的指代的
    所以,在全局范围运行的函数,this就是指向window

    balas
    0
  • 巴扎黑

    巴扎黑2017-04-10 15:20:28

    在 JavaScript 中, 上下文对象就是 this 指针,即被调用函数所处的环境。
    没做特殊处理的话,this根据当前执行环境决定执行那个对象的

    balas
    0
  • PHP中文网

    PHP中文网2017-04-10 15:20:28

    确实和闭包无关

    balas
    0
  • 大家讲道理

    大家讲道理2017-04-10 15:20:28

    var name = "The Window";
      var object = {
        name : "My Object",
        getNameFunc : function(context){
         var self = this; // object
           return function(){
           console.log(this); //window
           console.log(self); //object
            return this.name; //return window.name
         };
        }};
     getNameFuct是挂载到了object这个对象上,所以通过self捕获到的this指向object,而getNameFuc内部的匿名嵌套函数并没有挂载到object上,而是属于全局对象window的,使用this时访问的是window

    balas
    0
  • Batalbalas