有人可以解释为什么函数没有以第一方式获得对象的价值吗?

我得到了Backbone.View:

var some.view =  Backbone.View.extend({
elements = {},
//...
//some init, filling up elements...
//...
stopTask: function() {
   // Calling the function with parameters explained later
   stopThisTask(...);
}
});


和功能:

function stopThisTask(task){
    console.log(task);
}


当我通过以下方式调用stopThisTask时,task参数是未定义的

stopThisTask(this.elements);


但是,当我这样做时,task具有值

var tmp = this.elements;
stopThisTask(tmp);


有人可以解释为什么吗?
如果我知道的话,变量是通过值传递的,而对象是通过引用传递的。但是,这是否意味着以某种方式我会松散对元素对象的引用?

最佳答案

我怀疑在stopThisTask函数内部得到了解析,因此this.elements将指向this而不是stopThisTask的调用方。
通过在调用方中显式设置stopThisTask参数,可以确保使用正确的tmp范围。

应该相当于

stopThisTask.call(this, this.elements);

10-06 00:04