[TOC] #### 1. 前言 --- **apply() 的作用有兩個(gè): 1. 改變 this 指向 2. 將數(shù)組入?yún)⒆優(yōu)橐话闳雲(yún)?* 剛開(kāi)始看到 apply() 時(shí),對(duì)它的用法非常模糊,而且不易理解,通過(guò)查找相關(guān)文章,才慢慢的明白它的妙用 #### 2. 改變 this 指向 --- 相信在網(wǎng)上查找 apply() 用法時(shí),都會(huì)看到下面這段代碼,首次運(yùn)行,看到輸出的結(jié)果,我是懵逼的 ```javascript var person = { fullName: function () { return this.firstName + " " + this.lastName; } } var person1 = { firstName: "Bill", lastName: "Gates", } const res = person.fullName.apply(person1) console.log(res); // Bill Gates ``` 如何理解 apply() 這段代碼 ? person.fullName() 調(diào)用 this.firstName 和 this.lastName 這兩個(gè)屬性,this 指向 person,但它沒(méi)有這兩個(gè)屬性 使用 apply() 方法可以改變 this 的指向,將 this 的指向改為 person1,所以 person.fullName() 方法就可以成功訪問(wèn)到 this.firstName 和 this.lastName 這兩個(gè)屬性的值了 `person.fullName.apply(person1)` 可以理解為下面代碼,但不要這么寫,本質(zhì)不一樣 ```javascript person1.fullName = person.fullName person1.fullName() ``` #### 3. 將數(shù)組入?yún)⒆優(yōu)橐话闳雲(yún)?--- 以 `Math.max()` 舉例 ```javascript // 正確用法 Math.max(1, 2, 3) // 錯(cuò)誤用法 Math.max([1, 2, 3]) ``` 使用 apply() 的第二個(gè)參數(shù)將數(shù)組入?yún)⒆優(yōu)橐话闳雲(yún)? 注意,這里的第一個(gè)參數(shù)值為 null,也就是沒(méi)有改變 this 的指向 ``` Math.max.apply(null, [1, 2, 3]) ```