JavaScript 中 Function.prototype.apply 和 Function.prototype.call 的區別
Function.prototype.apply 和 Function.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* 更慢。 |
用法 |
|
|
結論
在本教程中,我們討論了 *apply* 和 *call* 方法的區別。這兩個方法的主要區別在於它們接受引數的方式。這些方法有不同的用法。您可以在上表中的“用法”行中檢視用法。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP