我正在阅读下划线的源代码,尤其是_.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/

10-13 00:35