Javascript 传递给fn.apply的标准默认第一个参数

Javascript 传递给fn.apply的标准默认第一个参数,javascript,Javascript,我最近了解了Javascript中fn.apply()的神奇之处,我正在使用它保存函数调用,使其所有参数保持不变,并在以后调用它们 但是,在我的用例中,我不需要第一个参数,即上下文(this),我希望避免以某种方式将this对象传递给它,以便在代码中明确说明我没有为此使用.apply() 我的第一个想法是传入null,但我读了以下内容: 如果该方法是非严格模式代码中的函数,null和undefined将被替换为全局对象,原始值将被装箱 这似乎意味着传递null甚至false都是不好的做法。在fn

我最近了解了Javascript中
fn.apply()
的神奇之处,我正在使用它保存函数调用,使其所有参数保持不变,并在以后调用它们

但是,在我的用例中,我不需要第一个参数,即上下文(
this
),我希望避免以某种方式将
this
对象传递给它,以便在代码中明确说明我没有为此使用
.apply()

我的第一个想法是传入
null
,但我读了以下内容:

如果该方法是非严格模式代码中的函数,
null
undefined
将被替换为全局对象,原始值将被装箱

这似乎意味着传递
null
甚至
false
都是不好的做法。在
fn.apply()
的第一个参数中输入的占位符值是什么

这似乎意味着传递
null
或甚至
false
是不好的做法

不,不是。诚然,
false
作为
这个
值有点奇怪,但是MDN警告的问题是草率的模式函数。示例:

function sloppy() {
    console.log(this);
}
function strict() {
    "use strict";
    console.log(this);
}
sloppy.call(null); // <Window> (or whatever the global object is)
sloppy.call(false); // Boolean {}
strict.call(null); // null
strict.call(false); // false
函数sloppy(){
console.log(this);
}
函数严格(){
“严格使用”;
console.log(this);
}
sloppy.call(null);//(或无论全局对象是什么)
草率。调用(false);//布尔{}
strict.call(null);//无效的
严格。调用(false);//假的
所以只要使用,你就会没事的。在草率模式函数中无法获得基元
this
值,这一点也不奇怪

如果不想传递任何值,建议使用
null
undefined

这似乎意味着传递
null
或甚至
false
是不好的做法

不,不是。诚然,
false
作为
这个
值有点奇怪,但是MDN警告的问题是草率的模式函数。示例:

function sloppy() {
    console.log(this);
}
function strict() {
    "use strict";
    console.log(this);
}
sloppy.call(null); // <Window> (or whatever the global object is)
sloppy.call(false); // Boolean {}
strict.call(null); // null
strict.call(false); // false
函数sloppy(){
console.log(this);
}
函数严格(){
“严格使用”;
console.log(this);
}
sloppy.call(null);//(或无论全局对象是什么)
草率。调用(false);//布尔{}
strict.call(null);//无效的
严格。调用(false);//假的
所以只要使用,你就会没事的。在草率模式函数中无法获得基元
this
值,这一点也不奇怪


如果您不想传递任何值,建议使用
null
undefined

传入
0
如何?与
false
@torazaburo相同:它将被装箱为
{Number:0}
@Bergi:让我感到非常羞愧的是,我承认我们还没有重构我们的应用程序以使用严格模式,尽管我们很快就会。传入
{}
怎么样?@sg.cc:不,您应该只传入
null
。我的意思是,如果你不关心这个值,你的函数根本不使用
this
关键字,所以你不需要担心?创建一个空对象似乎适得其反。没有特殊或有问题的“转换”。如果在不应用的情况下调用函数,也会发生同样的情况,即
sloppy()
strict()
——第一个函数将隐式获取全局对象上下文,第二个函数
未定义
。传入
0
如何?与
false
@torazaburo的情况相同:它将被装箱为
{Number:0}
@Bergi:让我感到非常遗憾的是,我承认我们还没有重构我们的应用程序以使用严格模式,尽管我们很快就会这样做。传入
{}怎么样
?@sg.cc:不,您应该只传递
null
。我的意思是,如果您不关心值,那么您的函数根本不使用
这个
关键字,所以您不必担心?创建空对象似乎会适得其反。没有特殊或有问题的“转换”。如果在不应用的情况下调用函数,也会发生同样的情况,即
sloppy()
strict()
——第一个将隐式获取全局对象上下文,第二个
未定义。