拆几步看 第一个是逗号操作符 大概用处就是从左到右依次求值然后返回最后一个值所以: (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 作用域下执行。
拆几步看
第一个是逗号操作符
大概用处就是从左到右依次求值然后返回最后一个值
所以:
然后需要看下面这个例子:
直接执行
_utils.func()
时,函数内部的this
指向了_utils
;当把
_utils.func
赋值到一个变量时,此时函数this
将指向该变量所在的作用域,即:而
(0, _utils.func)
的效果跟let func = _utils.func
是差不多的,但是保证_utils.func
所保存的匿名函数的this
一定会被指向window
,如:所以
(0, 匿名函数)(函数调用参数)
的写法就是保证函数是在window
作用域下执行。