为什么在JavaScript匿名函数的结尾写“调用”(this)?

在 JavaScript 中,我们经常会使用匿名函数。而在一些情况下,在匿名函数的结尾处添加 .call().apply() 方法并传入 this 参数是一个常见的做法。那么为什么需要这样做呢?

this 的指向问题

在 JavaScript 中,this 是一个关键字,它代表当前函数执行时所在的对象。但是,this 的指向却不总是我们期望的那样。

考虑以下代码:

--- ---- - ---------
-------- ----- -
  -----------------------
-
------ -- -- ------

在上述代码中,foo() 函数内部的 this 指向了全局对象,因此打印出了 "global"

但是,如果我们把 foo() 函数作为一个方法来调用,结果就会不同:

--- --- - ------ -------- ---- -----
---------- -- -- -----

在这个例子中,foo() 函数被作为 obj 对象的方法来调用,因此 this 指向了 obj 对象,打印出了 "local"

这种情况下,很容易出现误解和错误,在这里我们可以使用 .call().apply() 方法来指定 this 的值。

使用 .call() 或 .apply() 方法

.call().apply() 是 JavaScript 中的内置方法,它们都可以在调用函数时指定 this 的值。它们的语法如下:

------------------ ----- ----- ----
------------------- ------------

其中,thisArg 参数是一个对象,它将代替 this 关键字的值。arg1, arg2 等参数是传递给函数的实参。

例如,我们可以这样使用 .call() 方法:

--- --- - ------ ---------
-------- ----- -
  -----------------------
-
-------------- -- -- -----

在上述例子中,我们使用 .call() 方法来将 this 的值绑定到 obj 对象上,从而输出了 "local"

那么在匿名函数的结尾处添加 .call().apply() 方法并传入 this 参数,就是为了确保匿名函数中的 this 指向正确的对象。

示例代码

下面是一个示例,它演示了在匿名函数中使用 .call() 方法来指定 this 的值:

--- --- - -
  ----- --------
  ----- ---------- -
    ----------- -
      -----------------------
    --------------
  -
--
----------- -- -- -----

在上述代码中,我们定义了一个包含 func 方法的对象 obj,在 func 方法中,我们定义了一个匿名函数,并通过 .call() 方法将 this 的值传递给它。因此,匿名函数中的 this 指向了 obj 对象,输出了 "local"

总结

在 JavaScript 中,.call().apply() 方法可以用于指定函数执行时的 this 值。在使用匿名函数时,我们需要特别注意 this 的指向问题,并且可以通过在匿名函数结尾处添加 .call().apply() 方法来确保 this 的值被正确绑定。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/14220