下划线_.each方法
Underscore _.each method
我正在阅读下划线源代码,尤其是 _.each
方法。
我已经将它缩减为这个,但是我有点搞不清楚它是如何通过传递一个函数来工作的。
_.each = function(obj, iteratee, context) {
var i, length;
for (i = 0, length = obj.length; i < length; i++) {
iteratee(obj[i], i, obj);
}
return obj;
};
然后在控制台中,如果我这样写:
var sum = 0;
_.each([1,2,3], function(n){
sum += n;
});
//sum === 6;
我想了解的是 _.each
方法中到底发生了什么。
obj === [1,2,3]
和 iteratee == function(n){sum += n}
.
当你将它插入循环时,它在循环的第一个 运行 上是否正确
iteratee(obj[i], i, obj);
等同于以下?
function (n){
sum += n;
}([1,2,3][0], 0, [1,2,3])
函数是如何被调用的?循环是否调用它?我认为不会
当我玩弄并使用以下代码时,我收到以下错误消息:
for(var i = 0; i < 3; i++){
function (n){
sum += n;
}([1,2,3][i], i, [1,2,3]);
}
console.log(sum)
//Uncaught SyntaxError: Unexpected token (
任何人都可以阐明这里发生的事情吗?
你是对的,只是你的语法问题:
var sum = 0;
for(var i = 0; i < 3; i++){
(function (n){
sum += n;
})([1,2,3][i], i, [1,2,3]);
}
console.log(sum)
它在每次迭代中定义一个新的匿名函数并立即调用它,称为 Immediately Invoked Function Expression
我正在阅读下划线源代码,尤其是 _.each
方法。
我已经将它缩减为这个,但是我有点搞不清楚它是如何通过传递一个函数来工作的。
_.each = function(obj, iteratee, context) {
var i, length;
for (i = 0, length = obj.length; i < length; i++) {
iteratee(obj[i], i, obj);
}
return obj;
};
然后在控制台中,如果我这样写:
var sum = 0;
_.each([1,2,3], function(n){
sum += n;
});
//sum === 6;
我想了解的是 _.each
方法中到底发生了什么。
obj === [1,2,3]
和 iteratee == function(n){sum += n}
.
当你将它插入循环时,它在循环的第一个 运行 上是否正确
iteratee(obj[i], i, obj);
等同于以下?
function (n){
sum += n;
}([1,2,3][0], 0, [1,2,3])
函数是如何被调用的?循环是否调用它?我认为不会
当我玩弄并使用以下代码时,我收到以下错误消息:
for(var i = 0; i < 3; i++){
function (n){
sum += n;
}([1,2,3][i], i, [1,2,3]);
}
console.log(sum)
//Uncaught SyntaxError: Unexpected token (
任何人都可以阐明这里发生的事情吗?
你是对的,只是你的语法问题:
var sum = 0;
for(var i = 0; i < 3; i++){
(function (n){
sum += n;
})([1,2,3][i], i, [1,2,3]);
}
console.log(sum)
它在每次迭代中定义一个新的匿名函数并立即调用它,称为 Immediately Invoked Function Expression