gpt4 book ai didi

javascript - a是一个函数,那么 `a.call.call`到底是做什么的呢?

转载 作者:数据小太阳 更新时间:2023-10-29 03:50:32 24 4
gpt4 key购买 nike

enter image description here

这些代码在 chrome devtool 上运行。

好像b.call (与 a.call.call 相同)调用第一个参数,它是一个函数,然后将第二个参数作为 this 传递.如果第一个参数不是函数,则抛出 not a function错误。

谁能解释一下 <Function>.call.call工作?

最佳答案

让我给你举个例子。

function a() { console.log(1) }

function b() { console.log(2) }

a.call(b) // 1

a.call.call(b) // 2

a.call.call.call(b) // 2

为什么?

我们知道 a.call(b) 表示使用 thisb 调用 a()

所以 a.call.call(b) 意味着用 this 值 b 调用 Function.prototype.call(),与Function.prototype.call.call(b)

但是Function.prototype.call.call()并不是一个普通的函数对象。它可以被调用,但它没有属性。有一些独特的规则来调用它。

Function.prototype.call.call(a)    // 1

Function.prototype.call.call(b) // 2

事实上,Function.prototype.call.call(b)是一个Exotic Object,而且是一个Bound Function Exotic Object。

  • [说明] 绑定(bind)函数是一个外来对象,它包装了另一个函数对象。

  • [说明] 调用绑定(bind)函数通常会导致调用其包装函数。

所以 Function.prototype.call.call(a) 就是 a()

a.call.call(x)表示调用x,即x()

  • [规范] Function.prototype.call(thisArg)中,如果thisArg未定义或为null,将被全局对象替换。

a.call.call()表示a.call.call(undefined)表示a.call.call(window)表示调用窗口

尝试调用 window 你会得到 Uncaught TypeError: window is not a function,所以尝试调用 a.call.call() 你会得到 Uncaught TypeError: a.call.call is not a function

希望对您有所帮助。

关于javascript - a是一个函数,那么 `a.call.call`到底是做什么的呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34916477/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com