js fun调用

Author Avatar yakiler 发表于 • 2017年11月01日 16:33 • 共 • 539 • 次浏览

2个fun 全等,能说明Function.prototype.apply.apply和Function.prototype.call.apply是一个函数吗?传参方式为嘛不一样呢

最后编辑于 • 2017年11月01日 16:43 •  
2 回复
avatar
0
发放红包 2017年11月01日 17:35   # 1 楼

参数的传递方式不同是由规范决定的。

ECMA-262 规范 5. 1上的规定

  1. apply

https://www.ecma-international.org/ecma-262/5.1/#sec-15.3.4.3

Function.prototype.apply (thisArg, argArray)
  1. call

https://www.ecma-international.org/ecma-262/5.1/#sec-15.3.4.4

Function.prototype.call (thisArg [ , arg1 [ , arg2, … ] ] )

多次调用

多次调用的情况下,调用完成后会将返回的参数当成是下一次apply/call的参数,所以需要确保传递的正确的参数。

apply相等的问题

Function.prototype.apply, Function.prototype.call都是没有this依附,而需要传入this的函数。

所以不是对象,并且从返回的信息我们可以知道它们是原生函数,所以它们的空间地址是系统的。所以它们在不同的函数中也是一样的。

如下面的示例所示。

function a() {}
function b() {}
a.prototype.apply === b.prototype.apply
// => true

参考

MDN:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call

ECMA-262:

https://github.com/tc39/ecma262


avatar
0
yakiler 楼主
发放红包 2017年11月01日 18:21   # 2 楼

明白了,被 === 返回true搞懵逼了,谢谢田大大

你尚未登录,无法进行回复。