call,apply,bind的區別

call

php

apply

數組

bind

方法的共同點和區別:app

apply

 、 函數

call

 、this

bind

 三者都是用來改變函數的this對象的指向的;code

apply

 、 對象

call

 、blog

bind

 三者第一個參數都是this要指向的對象,也就是想指定的上下文(函數的每次調用都會擁有一個特殊值——本次調用的上下文(context)——這就是get

this

關鍵字的值。);it

apply

 、 

call

 、

bind

 三者均可以利用後續參數傳參;

bind

 是返回對應函數,便於稍後調用;

apply

 、

call

 則是當即調用 。
用一個實例來講明吧。
已知函數 fn 執行須要 3 個參數。請實現函數 partial,調用以後知足以下條件:
一、返回一個函數 result,該函數接受一個參數
二、執行 result(str3) ,返回的結果與 fn(str1, str2, str3) 一致
輸入:

var sayIt = function(greeting, name, punctuation) {     return greeting + ', ' + name + (punctuation || '!'); }; 
partial(sayIt, 'Hello', 'Ellie')('!!!');

輸出:

Hello, Ellie!!!
 call和apply必須顯式地調用str3,當即執行
 bind不是當即執行,未傳入str3時,並未執行,只是返回一個函數,等待參數傳入
// call
function partial(fn, str1, str2) {
    function result(str3) {
        return fn.call(this, str1, str2, str3);
//指定上下文爲this,以後參數挨個依次傳入
    }
 
     return result;
}
// apply
function partial(fn, str1, str2) {
    function result(str3) {
        return fn.apply(this, [str1, str2, str3]);
//參數以數組的形式傳入
    }
 
    return result;
}

bind不加後面的括號返回的是函數,加上後面的括號返回的是函數值,這也是bind和call和apply的主要區別,bind須要二次調用,而call和apply返回的是函數值,是直接調用。這道題讓我更理解了三者的區別。

function partial(fn, str1, str2) {
    
    var result=function(str3){
        return fn.bind(this,str1,str2)(str3);
    };
    return result;
}

 
 

轉載於猿2048:➺《call,apply,bind的區別》

相關文章
相關標籤/搜索