赋值应用于变量

Dom*_*jno 5 javascript apply

任何人都知道为什么在 javascript 中这有效

m = Math.max
m.apply(null, [1,2,3])
Run Code Online (Sandbox Code Playgroud)

但这不是吗?

m = Math.max.apply
m(null, [1,2,3])
Run Code Online (Sandbox Code Playgroud)

它抛出异常:

TypeError:Function.prototype.apply 在 undefined 上被调用,这是一个 undefined 而不是一个函数

gur*_*372 4

根据规格

  1. 如果 IsCallable(func) 为 false,则抛出 TypeError 异常。

funcapply是调用其方法的对象。

apply允许您指定后者的上下文function,这undefined在您的情况下是因为m没有函数上下文(应该在参数中指定)。

由于争论

未捕获的类型错误:在未定义上调用 Function.prototype.apply,这是未定义的而不是函数

您可以通过尝试以下方法来测试这一点

示例1:

m = Math.max.apply.bind(this)
m(this, [1,2,3]) 
Run Code Online (Sandbox Code Playgroud)

未捕获的 TypeError:Function.prototype.apply 被调用,它是一个对象而不是函数

示例2:

m = Math.max.apply.bind(null)
m(this, [1,2,3])
Run Code Online (Sandbox Code Playgroud)

未捕获的类型错误:在 null 上调用 Function.prototype.apply,这是一个对象而不是函数

示例 3:(由于指定了函数上下文,因此不会出现错误

m = Math.max.apply.bind(function(){})
m(this, [1,2,3])
Run Code Online (Sandbox Code Playgroud)

不明确的

示例 4:(最后这会给你想要的输出)

m = Math.max.apply.bind(Math.max)
m(this, [1,2,3])
Run Code Online (Sandbox Code Playgroud)

3