JavaScript 中 Function.prototype.apply 和 Function.prototype.call 的區別


Function.prototype.applyFunction.prototype.call 是允許您使用特定 `this` 值和引數呼叫函式的方法。兩者之間的主要區別在於,apply 允許您傳入一個引數陣列,而 call 則要求您逐個列出引數。

Function.prototype.apply

Function.prototype.apply 是一種允許您使用特定 `this` 值和引數陣列呼叫函式的方法。

語法

使用 apply 的語法如下:

func.apply(thisArg, argsArray)

這裡 thisArg 是將在函式內部用作 `this` 的值。argsArray 是將傳遞給函式的引數陣列。

示例

這是一個使用 apply 呼叫函式的示例:

<!doctype html>
<html>
<head>
   <title>Examples</title>
</head>
<body>
   <div id="result"></div>
   <script>
      function sayHello(name) {
         return "Hello, " + name + "!";
      }
      document.getElementById("result").innerHTML = sayHello.apply(null, ["John"])
   </script>
</body>
</html>

輸出

以上程式碼將列印以下輸出。

Hello, John!

如您所見,我們為 thisArg 傳遞了 null,因為我們不想設定 this 值。我們為 argsArray 傳遞了一個數組,其中包含引數“John”。結果是 sayHello 函式使用“John”作為 name 引數被呼叫。

Function.prototype.call

Function.prototype.call 是一種允許您使用特定 `this` 值和引數列表呼叫函式的方法。

語法

使用 call 的語法如下:

func.call(thisArg, arg1, arg2, ...)

這裡 thisArg 是將在函式內部用作 `this` 的值。arg1, arg2, … 是將傳遞給函式的引數。

示例

這是一個使用 *call* 呼叫函式的示例:

<!doctype html>
<html>
<head>
   <title>Examples</title>
</head>
<body>
   <div id="result"></div>
   <script>
      function sayHello(name) {
         return "Hello, " + name + "!";
      }
      document.getElementById("result").innerHTML = sayHello.call(null, ["John"])
   </script>
</body>
</html>

輸出

以上程式碼將列印以下輸出。

Hello, John!

如您所見,我們為 thisArg 傳遞了 null,因為我們不想設定 this 值。我們傳遞“John”作為唯一引數。結果是 sayHello 函式使用“John”作為 name 引數被呼叫。

Function.prototype.apply 和 Function.prototype.call 的區別

下表重點介紹了 Function.prototype.apply 和 Function.prototype.call 的主要區別:

比較依據
Function.prototype.apply
Function.prototype.call
定義
此方法允許我們使用特定的 *this* 值和引數陣列呼叫函式。
此方法允許我們使用特定的 *this* 值和引數列表呼叫函式。
引數
我們傳遞一個引數陣列。
我們傳遞一個引數列表。
速度
因為它不建立新函式,所以它比 *call* 更快。
因為它每次呼叫時都會建立一個新函式,所以它比 *apply* 更慢。
用法
  • 將陣列附加到另一個數組。

  • 編寫內建函式而無需迴圈。

  • 連結物件的建構函式。

  • 呼叫匿名函式。

  • 呼叫函式並指定 'this' 的上下文。

  • 呼叫函式而不指定第一個引數。

結論

在本教程中,我們討論了 *apply* 和 *call* 方法的區別。這兩個方法的主要區別在於它們接受引數的方式。這些方法有不同的用法。您可以在上表中的“用法”行中檢視用法。

更新於:2022年7月29日

458 次瀏覽

啟動您的 職業生涯

完成課程後獲得認證

開始學習
廣告
© . All rights reserved.