使用一个的原因
(0, foo.fn)();
Run Code Online (Sandbox Code Playgroud)
是切断绑定:this将不再foo绑定到全局对象,而是绑定到全局对象。
但是,任何 JavaScript 代码(或 Google 的 JS 代码)都想削减绑定的原因是什么?(它是否是反模式?)
tri*_*cot 13
这种代码通常由转译器(如 Babel)生成,以便将现代 JavaScript(使用规范的最新添加)转换为更广泛支持的 JavaScript 版本。
这是发生这种转译模式的示例:
假设我们在转译之前有这个原始代码:
import {myfunc} from "mymodule";
myfunc();
Run Code Online (Sandbox Code Playgroud)
要使此 ES5 兼容代码,您可以这样做:
"use strict";
var mymodule = require("mymodule");
mymodule.myfunc();
Run Code Online (Sandbox Code Playgroud)
但在这里我们将myfunc使用mymoduleasthis值执行,这在原始代码中没有发生。尽管这可能并不总是一个问题,但最好确保该函数的行为与原始版本中的一样,即使该函数将使用this引用——使用thisinmyfunc可能是多么不寻常甚至无用(因为在原始版本中也是如此undefined)。
因此,例如,如果原始代码会因为this.memberFun()函数中的引用而引发错误,那么它也会在转译后的版本中引发错误。
因此,逗号运算符用于消除这种差异:
(0, mymodule.myfunc)();
Run Code Online (Sandbox Code Playgroud)
诚然,在您自己编写的代码中,您永远不会有这种模式的良好用例,因为您首先不会使用thisin myfunc。
| 归档时间: |
|
| 查看次数: |
425 次 |
| 最近记录: |