我不理解许多underscore.js函数的上下文变量的用途。它的用途是什么。我知道它在迭代器回调中绑定了“this”,但我不明白它的实际应用。
var context = {'a': 'a'};
_.each([1, 2, 3], function(element, index, list)
{
console.log(this);
console.log(element);
console.log(index);
console.log(list);
}, context);
答案 0 :(得分:2)
下划线的_.each
看起来像这样:
_.each(list, iterator, [context])
当迭代器是您创建的某个对象的成员,并且您希望在对象范围而不是窗口中执行该函数时,上下文非常有用。如果您用作迭代器的预编写函数使用this
来引用Object的实例(通常就是这种情况),则调用不带上下文的函数将导致this
引用错了。
答案 1 :(得分:2)
如果 iterator 函数类似于对象上的方法,那么它很有用:
var context = {'a': 'a', foo: function(x) { console.log( this.a + x); }};
_.each([1, 2, 3], context.foo, context);
答案 2 :(得分:0)
当你不需要改变上下文时,它真的很有用,不要忘记它是硬依赖兄弟Backbone。
var Collection = Backbone.Collection.extend({
//..
_toggleActive: function (model, state) {
model.set({
active: state
});
},
deactivateAll: function () {
// analog _.each(this.models , func, [context])
this.each(function (model) {
// call the method of collection from context
this._toggleActive(model, false);
}, this);
}
//..
});
或仅用于调试
_.each([1,2,3], function(item, i, arr){
this.log(item, i);
}, console);
答案 3 :(得分:0)
从版本开始,下划线中约有21个函数接受' context'作为最后的可选参数。
_。each(list,iteratee(element,index,list),[context])
迭代一系列元素,然后依次产生一个iteratee函数。如果传递了一个,则iteratee绑定到上下文对象。
var array_1 = ['asdf', 'ghjk', 'lzxc', 'vbnm', 'qwer', 'tyui', 'op'];
var array_2 = [1,0,2,9,3,8,4,7,5,6];
_.each(array_1, function(element, index, list){
console.log(this.length - index + " - " + this[this.length - index]);
}, array_2);
将输出
1 - asdf
0 - ghjk
2 - lzxc
9 - vbnm
3 - qwer
8 - tyui
4 - op
这里对应于上下文数组array_2。