JavaScript中的void运算符将调用内部函数GetValue(expr),但始终返回undefined,无论值或表达式是什么.
规范说:
11.4.2无效算子
生产UnaryExpression:void UnaryExpression的计算方法如下:
- 设expr是评估UnaryExpression的结果.
- 打电话
GetValue(expr).- 返回undefined.
必须调用GetValue,即使它的值未被使用,因为它可能具有可观察到的副作用.
我的问题是,为什么?会发生什么样的可观察副作用?我们能否证明void如何改变程序流程,并讨论如果我们没有运行会发生什么GetValue?
如果你正在编写一个没有副作用的程序,那么总是返回undefined的函数没有用,因为它不会将有用的信息返回给调用者.在这种情况下,如果你总是知道你会得到什么,你根本不会调用该函数.
但是,如果一种语言具有"副作用",即使返回undefined的函数仍然可以在编程上有用."副作用"是某些效果的技术术语,它不是函数返回值的一部分.作为一个具体的例子,变异的DOM是一个副作用,就是不计算并返回一个有用的值,但仍希望您的DOM树的状态发生变异.播放声音也是一种副作用.
作为一个侧面说明,空自,语法,它迫使表达式上下文,使之类的函数表达式的值可以明确地表示可能是有用的.例如
void function(){alert('hi')}()
Run Code Online (Sandbox Code Playgroud)