左小白的技术日常
Github
2019/11/09
Author: guoqzuo

非箭头函数作为参数时this问题

复习下JS高程3里面将的函数做参数时this的问题,如果是非箭头函数,参数函数中使用了this,那么this取决于执行函数的this指向,而非参数函数执行环境的this,怎么将this绑定呢?有三种方法

  1. 使用bind绑定一个作用域
  2. 使用闭包
  3. 使用箭头函数

来看demo

var a = 5

function callback() {
  var a = 1
  console.log('-- callback this', this, this.a, '--')
}
function validate() {
  var a = 2
  console.log('-- validate this', this, this.a, '--')
}
function showPrompt(title, validate, callback) {
  validate() // 打印 5
  callback() // 打印 5
}
showPrompt('1', validate, callback) // 5 5 
showPrompt('1', validate.bind(validate), callback.bind(callback)) // 2 1