1 个回答

拆几步看

第一个是逗号操作符

大概用处就是从左到右依次求值然后返回最后一个值
所以:

(0, 1) // 1
(0, {}) // {}
(0, function () {}) // function () {}

然后需要看下面这个例子:

const _utils = {
    func: function () {
      console.log(this === window)
    }
}

_utils.func(); // false

let func = _utils.func
func() //true

(0, _utils.func)(); // true

直接执行 _utils.func() 时,函数内部的 this 指向了 _utils
当把 _utils.func 赋值到一个变量时,此时函数 this 将指向该变量所在的作用域,即:

let b = {a: func} // func 为上面片段中的 `let func = _utils.func`
b.a() // 此时函数内部的 this 指向 b

(0, _utils.func) 的效果跟 let func = _utils.func 是差不多的,但是保证 _utils.func 所保存的匿名函数的 this 一定会被指向 window,如:

const c = {
 a: function () {
   (0, _utils.func)()
 }
}

c.a() // true

所以 (0, 匿名函数)(函数调用参数) 的写法就是保证函数是在 window 作用域下执行。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题