教育行業(yè)A股IPO第一股(股票代碼 003032)

全國(guó)咨詢/投訴熱線:400-618-4000

.call()和.apply()的區(qū)別和作用是什么?

更新時(shí)間:2024年02月02日11時(shí)10分 來(lái)源:傳智教育 瀏覽次數(shù):

好口碑IT培訓(xùn)

  .call()和.apply()都是JavaScript中用于調(diào)用函數(shù)的方法,它們的作用是在指定的上下文(即函數(shù)內(nèi)部的 this 值)中調(diào)用函數(shù),并且可以傳遞參數(shù)。

  一.call() 方法:

  語(yǔ)法:

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

  ·function:要調(diào)用的函數(shù)。

  ·thisArg:在函數(shù)中使用的this值,即函數(shù)被調(diào)用時(shí)的執(zhí)行上下文。

  ·arg1, arg2, ...: 函數(shù)參數(shù)列表。

  作用:

  1.改變this的值:.call()允許你在調(diào)用函數(shù)的同時(shí)指定函數(shù)內(nèi)部的this值。

  2.傳遞參數(shù):你可以通過(guò).call()傳遞一個(gè)參數(shù)列表給函數(shù)。

  示例:

function greet(name) {
    console.log(`Hello, ${name}! My name is ${this.fullName}.`);
}

const person = {
    fullName: "John Doe"
};

greet.call(person, "Alice");
// 輸出:Hello, Alice! My name is John Doe.

  二.apply()方法:

  語(yǔ)法:

function.apply(thisArg, [argsArray])

  ·function:要調(diào)用的函數(shù)。

  ·thisArg:在函數(shù)中使用的this值,即函數(shù)被調(diào)用時(shí)的執(zhí)行上下文。

  ·argsArray:一個(gè)包含函數(shù)參數(shù)的數(shù)組。

  作用:

  1.改變this 的值:.apply()與.call()一樣,允許你在調(diào)用函數(shù)的同時(shí)指定函數(shù)內(nèi)部的this值。

  2.傳遞參數(shù):參數(shù)以數(shù)組形式傳遞給函數(shù)。

  示例:

function greet(name, age) {
    console.log(`Hello, ${name}! I am ${age} years old. My name is ${this.fullName}.`);
}

const person = {
    fullName: "John Doe"
};

greet.apply(person, ["Alice", 25]);
// 輸出:Hello, Alice! I am 25 years old. My name is John Doe.

  三、區(qū)別:

  1.參數(shù)傳遞方式:

  .call()的參數(shù)是按順序傳遞的。

  .apply()的參數(shù)是以數(shù)組形式傳遞的。

  2.性能:

  .通常來(lái)說(shuō),.call()的性能略高于.apply(),因?yàn)橹苯觽鬟f參數(shù)比通過(guò)數(shù)組更為高效。但在現(xiàn)代 JavaScript引擎中,性能差異可能并不明顯。

  3.語(yǔ)法糖:

  ES6引入了展開運(yùn)算符...,可以用于替代.apply(),使調(diào)用更簡(jiǎn)潔。

greet.call(person, ...["Alice", 25]);

  總體而言,選擇使用.call()還是.apply()取決于具體的需求和個(gè)人偏好。在現(xiàn)代JavaScript中,由于展開運(yùn)算符的引入,使用.call()或.apply()的場(chǎng)景相對(duì)減少。

0 分享到:
和我們?cè)诰€交談!