請問下,什么時候使用這兩個調(diào)用函數(shù)?這兩個的區(qū)別,以及分別什么情況下使用?
以上就是一個巧妙利用apply的例子. 當然你可能覺得這并沒有什么卵用, 沒有多提高效率. 但是想象一下, 你原本只有一個數(shù)組, 但是這個方法定義的接收的參數(shù)又不是數(shù)組的時候, 這就成了一個非常好的解決辦法.具體的妙用, 還待題主自己去發(fā)現(xiàn).
這個例子是在前面說明 this
對象的示例基礎(chǔ)上修改而成的。這一次,sayColor()
也是作為全局函數(shù)定義的,而且當在全局作用域中調(diào)用它時,它確實會顯示 "red"
,因為對 this.color
的求值會轉(zhuǎn)換成對 window.color
的求值。而 sayColor.call(this)
和 sayColor.call(window)
,則是兩種顯式地在全局作用域中調(diào)用函數(shù)的方式,結(jié)果當然都會顯示 "red"
。但是,當運行 sayColor.call(o)
時,函數(shù)的執(zhí)行環(huán)境就不一樣了,因為此時函數(shù)體內(nèi)的 this
對象指向了 o
,于是結(jié)果顯示的是 "blue"
。
需要改變一個運行函數(shù)的作用域的時候進行調(diào)用,這兩個區(qū)別在于接收的參數(shù)不一樣apply()接收兩個參數(shù):一個是在其中運行函數(shù)的作用域,另一個是參數(shù)數(shù)組(可以是Array的實例也可是arguments對象).call()接收兩個參數(shù),第一個參數(shù)與apply參數(shù)相同,其余的參數(shù)都需要直接傳遞給函數(shù),傳遞給函數(shù)的參數(shù)必須全部列舉出來。bind()方法會創(chuàng)建一個函數(shù)的實例,其this值會被綁定到傳給bind()函數(shù)。
call()
方法與 apply()
方法的作用相同,它們的區(qū)別僅在于接收參數(shù)的方式不同。對于 call()
方法而言,第一個參數(shù)是 this
值沒有變化,變化的是其余參數(shù)都直接傳遞給函數(shù)。換句話說,在使用 call()
方法時,傳遞給函數(shù)的參數(shù)必須逐個列舉出來,如下面的例子所示。