我正在阅读下划线的源代码,尤其是_.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
关于javascript - 下划线_.each方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36073134/