Javascript “的含义;“可选”;对于.call方法的第一个参数

Javascript “的含义;“可选”;对于.call方法的第一个参数,javascript,Javascript,我对一本Javascript忍者手册的代码示例(清单6.9)进行了一些调整,使其更加简短。这个代码片段是关于向Array.prototype添加一个forEach方法的(为了避免混淆,我将其重命名为fooach)。现在的问题是:为什么我们需要传递(context | | null)作为第一个参数(在代码示例中为null)?Function.call方法有它的第一个参数——上下文——可选,那么为什么在这种情况下必须将上下文作为第一个参数传递呢 if (!Array.prototype.fooEac

我对一本Javascript忍者手册的代码示例(清单6.9)进行了一些调整,使其更加简短。这个代码片段是关于向Array.prototype添加一个forEach方法的(为了避免混淆,我将其重命名为fooach)。现在的问题是:为什么我们需要传递(context | | null)作为第一个参数(在代码示例中为null)?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));
});
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()
;在严格模式下,它会将
变为
未定义
但:)