Javascript 为什么会有这样的结果?
我最近看了一段视频,老师演示了javascript代码Javascript 为什么会有这样的结果?,javascript,return,Javascript,Return,我最近看了一段视频,老师演示了javascript代码 alert.call.apply(function(a) {return a}, [1,2]) 结果总是“2”。所以我的问题是:为什么 我找不到返回此结果的任何解释。此代码太聪明了! 但请稍候,以下代码将产生相同的结果: console.log.call.apply(function(a) {return a}, [1,2]) 发生的情况如下:apply()的第一个参数是“this”,第二个是参数列表。然后,它使用这些参数调用函数con
alert.call.apply(function(a) {return a}, [1,2])
结果总是“2”。所以我的问题是:为什么
我找不到返回此结果的任何解释。此代码太聪明了! 但请稍候,以下代码将产生相同的结果:
console.log.call.apply(function(a) {return a}, [1,2])
发生的情况如下:apply()
的第一个参数是“this
”,第二个是参数列表。然后,它使用这些参数调用函数console.log.call
,逻辑上相当于:
(function(a) {return a}).call(1,2)
这段代码产生相同的结果,并且更容易理解-我们正在对未命名函数使用call()
call()
的参数是一个“this
”对象,后跟参数。在本例中,“this
”是1
,参数是2
,因此调用该函数时将a
分配给2
(未绑定的函数中不使用1
)。因此它总是返回2
,因为它只是返回列表中的第二项
但是,警报
的作用是什么,为什么我们可以在那里替换任何函数名?嗯,似乎有一个call()
函数在所有原型之间共享。您可以通过运行
alert.call === console.log.call
true
因此,无论我们使用alert
,console.log
,还是什么都不使用,我们总是使用相同的call()
函数。alert.call.apply(函数(a){return a}[1,2])
->(函数(a){return a;})。调用(1,2)
->->->函数(a){return a;}>2