关于call和bind的区别

2019-07-10  本文已影响0人  UmustHU

不多说,直接上代码

回调函数中用call

更改函数的this指向,函数也会立即执行,返回值是函数的执行结果

var obj = {
    name: 'Dot'
}
function test(callback){
    console.log('callback:',callback)
    callback();
}
test(function(){
    console.log('name:',this)
}.call(obj))

//打印结果
//name: {name: "Dot"}
//callback: undefined
//Uncaught TypeError: callback is not a function
回调函数中用bind

更改函数的this指向,但是该函数不会立即执行,返回值是更改了this指向的函数

var obj = {
    name: 'Dot'
}
function test(callback){
    console.log('callback:',callback)
    callback();
}
test(function(){
    console.log('name:',this)
}.bind(obj))

//  打印结果
//  callback: ƒ (){
//    console.log('name:',this)
//  }
//  name: {name: "Dot"}
函数执行用call

更改函数this指向,同时立即执行,没有返回值

var obj = {
    name: 'Dot'
}
function printName() {
    console.log(this.name)
}
printName.call(obj)

//  打印结果
//  Dot
函数执行用bind

更改函数this指向,但是函数不会立即执行,而是返回一个更改this指向后的函数

var obj = {
    name: 'Dot'
}
function printName() {
    console.log(this.name)
}
var res = printName.bind(obj)
console.log(res)

//  打印结果
//  ƒ printName() {
//      console.log(this.name)
//  }

res()
//打印结果
// Dot
上一篇下一篇

猜你喜欢

热点阅读