gpt4 book ai didi

带有回调示例的 javascript 忍者书

转载 作者:行者123 更新时间:2023-12-03 07:54:54 25 4
gpt4 key购买 nike

因此,阅读这本优秀的《Javascript Ninja》书并取得进展。不过,对下面的代码有疑问,我无法理解为什么使用 cb.call 以及为什么要传递看似空的上下文。我认为它可能刚刚完成了 cb(this[i],i,this) 因为“this”没有被使用。我在这里错过了一个重要的点吗?请帮忙。谢谢。

<ul id="results"></ul>
<script>
function assert(val,desc){
var li = document.createElement("li");
li.className = val ? "pass" : "fail";
li.appendChild(document.createTextNode(desc));
document.getElementById("results").appendChild(li);

}

if ( !Array.prototype.forEach2) {
Array.prototype.forEach2 = function(cb,context){
for ( var i = 0; i < this.length; i++){
cb.call(context ||null, this[i], i, this);
}
};
}

["a,","b","c"].forEach2(function(value,index,array){
assert(value,"Is in position " + index + " out of " + (array.length - 1));
});

assert(true,"this will be green");
assert(false,"this is RED");
</script>

最佳答案

在列出的 forEach2 的具体示例中,您是对的,没有使用上下文 (this),因此您可以在实现中执行常规函数调用。如果您不关心回调函数中 this 的特定值,那么您可以在此停止并仅使用常规函数调用。

但是,使用 .call 实现并允许传递上下文可以让您选择传递特定的上下文值(如果您在某个时候需要它,但并不需要) 如果你不需要它,你就忽略它。这意味着,你可以这样做:

var context = { 
something: 'hello'
};

['a', 'b', 'c'].forEach2(function(value, index, array) {
// this.something would be 'hello' in this function
}, context);

关于带有回调示例的 javascript 忍者书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34842540/

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