Javascript “的含义;“可选”;对于.call方法的第一个参数
我对一本Javascript忍者手册的代码示例(清单6.9)进行了一些调整,使其更加简短。这个代码片段是关于向Array.prototype添加一个forEach方法的(为了避免混淆,我将其重命名为fooach)。现在的问题是:为什么我们需要传递(context | | null)作为第一个参数(在代码示例中为null)?Function.call方法有它的第一个参数——上下文——可选,那么为什么在这种情况下必须将上下文作为第一个参数传递呢Javascript “的含义;“可选”;对于.call方法的第一个参数,javascript,Javascript,我对一本Javascript忍者手册的代码示例(清单6.9)进行了一些调整,使其更加简短。这个代码片段是关于向Array.prototype添加一个forEach方法的(为了避免混淆,我将其重命名为fooach)。现在的问题是:为什么我们需要传递(context | | null)作为第一个参数(在代码示例中为null)?Function.call方法有它的第一个参数——上下文——可选,那么为什么在这种情况下必须将上下文作为第一个参数传递呢 if (!Array.prototype.fooEac
if (!Array.prototype.fooEach) {
Array.prototype.fooEach = function(callback, context) {
for (var i = 0; i < this.length; i++) {
callback.call(context || null, this[i], i, this);
}
};
}
["a", "b", "c"].fooEach(function(value, index, array) {
console.log(value + " is in position " + index + " out of " + (array.length - 1));
});
if(!Array.prototype.fooEach){
Array.prototype.fooather=函数(回调,上下文){
for(var i=0;i
Function.call方法有它的第一个参数——上下文——可选,那么为什么在这种情况下必须将上下文作为第一个参数传递呢
if (!Array.prototype.fooEach) {
Array.prototype.fooEach = function(callback, context) {
for (var i = 0; i < this.length; i++) {
callback.call(context || null, this[i], i, this);
}
};
}
["a", "b", "c"].fooEach(function(value, index, array) {
console.log(value + " is in position " + index + " out of " + (array.length - 1));
});
因为.call()
是一个可变函数;它接受未知数量的参数,因此任何固定参数(或语义与其他参数不同的参数)都放在前面
将
undefined
或null
指定为第一个参数,将在使用全局对象调用的函数中(在模式下)替换此
.它在函数内部设置this
。@DanielA.White-为什么null
优于未定义的或0
?@DanielA.White:OP询问它们为什么传递上下文| null
而不仅仅是上下文
。这值得一个解释,而不仅仅是结束。鉴于这个问题是重复的(为什么?),我无法发布答案。第一个参数是“可选”的,即如果没有任何值可传递给它,则传递null
或undefined
。JavaScript没有关键字参数的概念,并且由于其他参数的类型,无法确定是否跳过了第一个参数。谢谢@Blender!这正是我的困惑。我认为“optional”的意思是“可能不存在”,显然我对call方法如何判断我们是否将第一个参数传递给它感到困惑。谢谢!混淆是关于第一个(“上下文”)参数“可选”的含义。我假设编码器可以根据代码的逻辑选择是否将其放在那里。这个假设带来了一个更大的难题——call如何知道传递给它的第一个参数是上下文,还是smth,或者其他?!现在一切都清楚了——人们总是必须传递上下文值,即使它为null。@juniornija如果没有参数,也可以执行.call()
;在严格模式下,它会将此
变为未定义
但:)