JS中的apply、call、bind区别

apply、call、bind 用法

1:作用

改变函数运行时的上下文,即改变this的指向问题。

xxxFunction.call(this,arg1,arg2,arg3);
xxxFunction.apply(this,[arg1,arg2,arg3]);
xxxFunction.bind(this,arg1,arg2,arg3);

 

2:区别

apply或call方法,那么this指向他们的第一个参数,apply的第二个参数是一个参数数组,call的第二个及其以后的参数都是数组里面的元素,就是说要全部列举出来;

bind与apply、call最大的区别就是:bind不会立即调用,其他两个会立即调。如果多次调用bind,那么多出来的次数都是无效的

 

3: Demo

function runSetTimeoutFn(fn){
    setTimeout(fn,2000)
}
var name = 'global name';
var obj = {
    name:'web',
    say:function(str){
        console.log(str + ':' + this.name);
    }
}
var say =obj.say;
runSetTimeoutFn(say.call(null,"hello"));  // 立即运行  hello:global name
runSetTimeoutFn(say.bind(null,"hello"));  // 2s后运行  hello:global name
runSetTimeoutFn(say.call(obj,"hello")); // 立即运行  hello:web
runSetTimeoutFn(say.bind(obj,"hello")); // 2s后运行  hello:web

 

posted @ 2018-05-09 15:41  weboey  阅读(231)  评论(0编辑  收藏  举报