更新時(shí)間:2024年02月02日11時(shí)10分 來(lái)源:傳智教育 瀏覽次數(shù):
.call()和.apply()都是JavaScript中用于調(diào)用函數(shù)的方法,它們的作用是在指定的上下文(即函數(shù)內(nèi)部的 this 值)中調(diào)用函數(shù),并且可以傳遞參數(shù)。
語(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.
語(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.
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ì)減少。
北京校區(qū)