gpt4 book ai didi

javascript - 理解 Underscore 的 _.each

转载 作者:行者123 更新时间:2023-11-30 17:29:14 24 4
gpt4 key购买 nike

我是函数式编程的新手,并试图通过对一些关键的 Underscore 函数进行逆向工程来收集知识。由于 _.each 是基础的,我想我会从那里开始。这是我的精简版(为简单起见),没有错误检查、上下文绑定(bind)和其他一些 Underscore 功能:

var myEach = function(collection, iterator) {
if (collection instanceof Array) {
for (var i = 0; i < collection.length; i++) {
iterator(collection[i], i, collection);
}
} else {
for (var key in collection) {
iterator(collection[key], key, collection);
}
}
};

欢迎提出一般性意见,但我的问题具体围绕那些传递给 iterator(collection[i], i, collection) 参数。

这是怎么回事?这些参数在使用过程中如何变成可选的?

很确定它与 arguments 对象有关,但我真的很想了解幕后发生的事情。

谢谢!

最佳答案

在 javascript 中,函数的调用者决定将哪些参数传递给它正在调用的函数。

然后被调用的函数可以决定它关心使用或不使用哪些参数。因此,迭代器回调可以按需要声明。第一个参数是要迭代的项目,第二个参数是集合的索引,第三个参数是集合本身。

如果只用第一个参数声明回调,那么这并不重要。所有三个参数都在那里,无论回调是否声明它们,如果它们没有在函数声明中声明,它们就不能通过命名参数全部访问,但它们都在 arguments 对象。


也许这会给你一些想法:

function callMe(callback) {
callback(1, 2, 3);
}

callme(function(a) {
// a === 1
})

callme(function() {
// all the arguments are still there
// even though none are declared
// arguments[0] === 1
// arguments[1] === 2
// arguments[2] === 3
});

callme(function(a, b, c) {
// a === 1
// b === 2
// c === 3
})

callme(function(a, b, c, d) {
// a === 1
// b === 2
// c === 3
// d === undefined
})

关于javascript - 理解 Underscore 的 _.each,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23532127/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com