在我参加的课程中,我遇到了以下代码:
var carlike = function(obj, loc){
obj.loc = loc;
obj.move = move;
return obj;
};
var move = function(){
this.loc++;
};
var ben = carlike({}, 9);
我的理解是,当在其执行上下文的创建阶段期间在最后一行调用函数carlike
时,变量move
被设置为undefined
。所以我的问题是:move
设置为等于function() {this.loc++;};
?我发现这令人困惑,因为移动功能是在carlike功能之后定义的。那么carlike
如何在它之后访问环境。
我真的想知道它在执行上下文,范围等方面的工作原理。
我读过的一些事情试图理解这一点:
http://dmitrysoshnikov.com/ecmascript/chapter-1-execution-contexts/ http://corporate.tuenti.com/en/dev/blog/functions-and-execution-contexts-in-javascript-2
答案 0 :(得分:0)
它可以访问该移动变量,因为虽然函数移动是在函数carlike之后声明的,但是函数carlike在引用之后才引用move,因为在移动之后调用carlike被定义为函数。如果你在move的定义之上调用carlike,那么move将被设置为undefined,因为该函数还不存在。