关于JavaScript中(0, _Bounds.parseDocumentSize)(ownerDocument)语法的疑问
解析
(0, _Bounds.parseDocumentSize)(ownerDocument)里0的作用 嘿,这个写法其实是利用了JS里的逗号操作符,0本身没什么实际业务作用,就是个占位的表达式,核心目的是改变函数调用时的this指向。
我给你拆解一下:
- 逗号操作符的规则是:依次执行逗号分隔的每个表达式,最后返回最后一个表达式的结果。所以
(0, _Bounds.parseDocumentSize)会先执行0(啥也不影响),然后返回_Bounds.parseDocumentSize这个函数本身。 - 关键的点来了:当你直接调用
_Bounds.parseDocumentSize(ownerDocument)时,函数内部的this会绑定到_Bounds这个对象上;但通过逗号操作符“提取”出来再调用,这个函数就变成了一个独立的函数,此时调用它,this会指向全局对象(浏览器环境是window,严格模式下是undefined)。
这种写法在模块化代码里特别常见,比如ES6模块转译后的代码,或者像html2canvas这类用模块化开发的库。这么做是为了避免函数内部的this意外绑定到原导出对象上,保证函数的执行行为符合预期——毕竟很多工具函数设计的时候,本来就不需要依赖this指向某个特定对象。
顺带提一句,不止是0,你换成1、null、undefined这些表达式都能达到同样的效果,只是0是最简洁的占位写法而已。
内容的提问来源于stack exchange,提问作者Software Wisdom
相关产品推荐
相关产品推荐

