Javascript ';这';当函数中不存在时,调用()的行为会有所不同

Javascript ';这';当函数中不存在时,调用()的行为会有所不同,javascript,Javascript,我正在学习javascript 为什么使用this和不使用this时,函数.call()的行为不同 在test.call()中使用this的程序,当this被undefined替换时,结果相同 功能测试(a、b){ 控制台日志(a+b); } 设args=[1,2] 调用(此,…args); //输出:3正确的语法是使用.call()并将其作为第一个参数。你可以阅读更多关于 也可以通过传递null来忽略它: func.call(null, arg1, arg2, ...argN) 调用函数需

我正在学习javascript 为什么使用
this
和不使用
this
时,函数.call()的行为不同

test.call()
中使用
this
的程序,当
this
undefined
替换时,结果相同

功能测试(a、b){
控制台日志(a+b);
}
设args=[1,2]
调用(此,…args);

//输出:3
正确的语法是使用
.call()
并将其作为第一个参数。你可以阅读更多关于

也可以通过传递null来忽略它:

func.call(null, arg1, arg2, ...argN)

调用函数需要第一个参数作为“this”对象,如果不需要,只需传递null即可

test.call(null, ...args);

在这种情况下,将参数传递到测试函数中的
this
,而不是传递到(a,b)。
您可以添加
console.log(this)
以检查两种情况之间的差异

功能测试(a、b){
console.log(this)//编号1
console.log(a)//编号2
console.log(b)//未定义
console.log(a+b)//2+未定义将为NaN
}
设args=[1,2]
test.call(…args);
因此,这意味着第一个参数将是
this

如果您在第一个参数中传递字符串,您的this将是“hihihi”

功能测试(a、b){
console.log(this)/“hihihi”
console.log(a)//编号1
console.log(b)//编号2
}
设args=[1,2]
test.call(“hihihi”,…args);

我认为此链接将帮助您更详细地了解。call需要一个引用作为第一个参数,“当它被
未定义的
”替换时,结果是相同的,但是
test.call(…args)未将
替换为
未定义
。该调用相当于
test.call(1,2)
so、
this=1
a=2
b=undefined
this
参数不是可选的,如果希望它是
未定义的
,那么调用
call
如下:
test.call(undefined,.args)
,否则
args[0]/code>(在本例中为
1
)将用作
@Durga这不是重复的。另一个问题可能有助于澄清一点,但它绝不是重复的
test.call(null, ...args);