函数参数未直接获取值

时间:2015-07-03 11:22:52

标签: javascript backbone.js

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

我得到了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);

有人可以解释为什么会这样吗? 如果我知道,变量是按值传递的,而obects是通过引用传递的。但是,这是否意味着我在某种程度上放弃了元素对象的引用?

1 个答案:

答案 0 :(得分:1)

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

应该相当于

stopThisTask.call(this, this.elements);