js执行顺序

新手上路,请多包涵

clipboard.png

这段代码js是如何解析的?

阅读 2.2k
3 个回答

当你执行object.getNameFunc()时,返回的是一个匿名函数:

function(){
    return this.name; 
}

当你调用该匿名函数时,这时的this指向的是window,因为js中所有匿名函数的this都执行window,所以最后返回的值是'The Window'。如果你想让当前匿名函数返回当前object中的name有两种方法:

1:为object方法中指定一个that变量,让that指向this。在对象方法中的this指向的都是当前对象。

getNameFunc: function() {
    var that = this;
    return function() {
        return that.name;
    }
}

2:使用call来调用该匿名函数,改变this的指向。

object.getNameFunc().call(object);
var name;
name = 'The Window'; 
var object = {};
object.name = 'My Object';
object.getNameFunc = function(){
    console.log(this.name); //My Object  'My Object';
    return function(){
        return this.name; //window.name 'The Window';
    }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题