bind()&call()&apply()的區別?

在js權威指南上說,call()和apply()能夠看作是某個對象的方法,經過調用方法的形式來直接調用函數,---------------能夠理解爲讓函數在某個指定的對象下執行,即改變函數內部*this指向 ,bind()就是將某個函數直接綁定到某個對象;html

var obj = {x: 1}

function foo() {console.log(this.x)}

foo.call(obj)       //打印結果: 1

 

 apply() 和 call() 指定的第一個參數相同,都是指定的對象(*this),這個對象是該函數執行的上下文;數組

 

              可是apply()和call()第二個及後面的參數不同;
app

               事實上,call()第二個開始的全部參數指將要傳到函數內部的值;函數

                而apply()第一個參數後面的參數有且只有一個,並且是一個數組,數組裏麪包含的就是call()第二個開始的全部參數;this

     例如:  1.spa

var obj = {};
 
function foo(a, b, c) {
  console.log(b);
}
 
foo.call(obj, 1, 2, 3)   //打印結果: 2;

         2.htm

var obj = {};
 
function foo(a, b, c) {
  console.log(b);
}
 
foo.apply(obj, [1, 2, 3])   打印結果: 2;

 bind()方法也會改變函數內部*this的指向, 對象

    bind()會建立一個新函數,成爲綁定函數,當調用這個函數的時候,綁定函數會以建立它時綁定bind()方法傳入的第一個參數做爲this對象,傳入bind()方法的第二個及之後的參數加上綁定函數運行時自己的參數,按照順序做爲原函數的參數來調用原函數;blog

   bind()和call()&apply()最大的區別在於:bind()不會當即調用,而其它兩個會當即調用;屢次調用bind(),出來的次數也是無效的io

eg:

三者的異同總結:

    1.都是用來改變函數this對象的指向

    2.第一個參數都是this 要指向的對象

    3.均可以利用後續參數傳參

    4.bind()是返回對應函數,不會當即執行,稍後調用;apply()和call()是當即調用,刷新即調用

相關文章
相關標籤/搜索