apply.call问题
生活随笔
收集整理的這篇文章主要介紹了
apply.call问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
聰明的程序員發現, apply還有一個妙用, 就是將一個不是接收數組參數的方法, 通過apply來傳遞數組參數進去.比如:
在上面這個例子中,callSum1() 在執行 sum() 函數時傳入了 this(因為是在全局作用域中調用的,所以傳入的就是 window 對象)和 arguments 對象。而 callSum2 同樣也調用了 sum() 函數,但它傳入的則是 this 和一個參數數組。這兩個函數都會正常執行并返回正確的結果。
如需了解更多內容,請參考:https://github.com/stone0090/...
apply和call的主要區別, apply的后一個參數是以數組的形式, 而call是列舉的方式(很多個參數).至于第一個參數, 其實都差不多.這個差別就為我們何時使用call, 何時使用apply做出了明顯的分界. 即參數為數組時使用apply, 非數組用call.
使用 call() 或 apply() 來擴充作用域的最大好處,就是對象不需要與方法有任何耦合關系。在前面例子的第一個版本中,我們是先將 sayColor() 函數放到了對象 o 中,然后再通過 o 來調用它的;而在這里重寫的例子中,就不需要先前那個多余的步驟了
在使用 call() 方法的情況下,callSum() 必須明確地傳入每一個參數。結果與使用 apply() 沒有什么不同。至于是使用 apply() 還是 call(),完全取決于你采取哪種給函數傳遞參數的方式最方便。如果你打算直接傳入 arguments 對象,或者包含函數中先接收到的也是一個數組,那么使用 apply() 肯定更方便;否則,選擇 call() 可能更合適。(在不給函數傳遞參數的情況下,使用哪個方法都無所謂。)事實上,傳遞參數并非 apply() 和 call() 真正的用武之地;它們真正強大的地方是能夠擴充函數賴以運行的作用域。下面來看一個例子。
在上面這個例子中,callSum1() 在執行 sum() 函數時傳入了 this(因為是在全局作用域中調用的,所以傳入的就是 window 對象)和 arguments 對象。而 callSum2 同樣也調用了 sum() 函數,但它傳入的則是 this 和一個參數數組。這兩個函數都會正常執行并返回正確的結果。
如需了解更多內容,請參考:https://github.com/stone0090/...
apply和call的主要區別, apply的后一個參數是以數組的形式, 而call是列舉的方式(很多個參數).至于第一個參數, 其實都差不多.這個差別就為我們何時使用call, 何時使用apply做出了明顯的分界. 即參數為數組時使用apply, 非數組用call.
使用 call() 或 apply() 來擴充作用域的最大好處,就是對象不需要與方法有任何耦合關系。在前面例子的第一個版本中,我們是先將 sayColor() 函數放到了對象 o 中,然后再通過 o 來調用它的;而在這里重寫的例子中,就不需要先前那個多余的步驟了
在使用 call() 方法的情況下,callSum() 必須明確地傳入每一個參數。結果與使用 apply() 沒有什么不同。至于是使用 apply() 還是 call(),完全取決于你采取哪種給函數傳遞參數的方式最方便。如果你打算直接傳入 arguments 對象,或者包含函數中先接收到的也是一個數組,那么使用 apply() 肯定更方便;否則,選擇 call() 可能更合適。(在不給函數傳遞參數的情況下,使用哪個方法都無所謂。)事實上,傳遞參數并非 apply() 和 call() 真正的用武之地;它們真正強大的地方是能夠擴充函數賴以運行的作用域。下面來看一個例子。
總結
以上是生活随笔為你收集整理的apply.call问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 荣耀畅玩7x参数配置,荣耀畅玩7x机身配
- 下一篇: 诺基亚5230壁纸下载,快速下载诺基亚5