請問下,什么時候使用這兩個調(diào)用函數(shù)?這兩個的區(qū)別,以及分別什么情況下使用?
聰明的程序員發(fā)現(xiàn), apply還有一個妙用, 就是將一個不是接收數(shù)組參數(shù)的方法, 通過apply來傳遞數(shù)組參數(shù)進去.比如:
在上面這個例子中,callSum1()
在執(zhí)行 sum()
函數(shù)時傳入了 this
(因為是在全局作用域中調(diào)用的,所以傳入的就是 window
對象)和 arguments
對象。而 callSum2
同樣也調(diào)用了 sum()
函數(shù),但它傳入的則是 this
和一個參數(shù)數(shù)組。這兩個函數(shù)都會正常執(zhí)行并返回正確的結(jié)果。
如需了解更多內(nèi)容,請參考:https://github.com/stone0090/...
apply和call的主要區(qū)別, apply的后一個參數(shù)是以數(shù)組的形式, 而call是列舉的方式(很多個參數(shù)).至于第一個參數(shù), 其實都差不多.這個差別就為我們何時使用call, 何時使用apply做出了明顯的分界. 即參數(shù)為數(shù)組時使用apply, 非數(shù)組用call.
使用 call()
或 apply()
來擴充作用域的最大好處,就是對象不需要與方法有任何耦合關(guān)系。在前面例子的第一個版本中,我們是先將 sayColor()
函數(shù)放到了對象 o
中,然后再通過 o
來調(diào)用它的;而在這里重寫的例子中,就不需要先前那個多余的步驟了
在使用 call()
方法的情況下,callSum()
必須明確地傳入每一個參數(shù)。結(jié)果與使用 apply()
沒有什么不同。至于是使用 apply()
還是 call()
,完全取決于你采取哪種給函數(shù)傳遞參數(shù)的方式最方便。如果你打算直接傳入 arguments
對象,或者包含函數(shù)中先接收到的也是一個數(shù)組,那么使用 apply()
肯定更方便;否則,選擇 call()
可能更合適。(在不給函數(shù)傳遞參數(shù)的情況下,使用哪個方法都無所謂。)事實上,傳遞參數(shù)并非 apply()
和 call()
真正的用武之地;它們真正強大的地方是能夠擴充函數(shù)賴以運行的作用域。下面來看一個例子。