产生*副作用*的表达究竟是什么?

时间:2011-07-01 01:25:23

标签: javascript

我无法理解页面https://developer.mozilla.org/en/JavaScript/Reference/Operators/Special/void中的这一段:

  

此操作符允许插入   产生副作用的表达式   进入表达的地方   需要评估为undefined。

产生副作用的表达式究竟是什么

5 个答案:

答案 0 :(得分:6)

一个函数通常做两件事:执行某事并返回一个值。有些功能只执行其中一项,有些功能同时执行。例如函数:

function square(x) {
  return x * x;
}

副作用是免费的,因为它所做的只是返回一个值,并且它的调用总是可以用它的返回值替换。另一方面,像alert()这样的东西只会被调用它的副作用(警告用户),而不会被称为返回值。

那么void运算符的作用是让JavaScript忽略返回值并说明你感兴趣的只是函数的副作用。

答案 1 :(得分:2)

一个简单的例子是函数调用。如果你需要一个“未定义”值,但你也想调用一个函数(比如说)做一些DOM操作,你可以将结果“转换”为void并得到一个未定义的结果。

我绝对不认为这会出现在语言的“好部分”中,尽管它确实绕过了一个奇怪的事实,即“未定义”并不是一个真正的保留词。表达式void 0肯定会真的未定义。

答案 2 :(得分:2)

表达式(i+=1)的计算结果为i+1,但副作用是将i递增1。

void的目的不是掩盖副作用,而是专门针对想要副作用时,但想要结果表达

答案 3 :(得分:1)

'副作用'是void作为参数的函数的结果。在这种情况下,函数F1返回'false',但是将它包装在'void'中基本上'吞下'那个结果或'副作用':

var F1 = function() { return false; }
void(F1());

请原谅无偿使用引号......哈哈。

答案 4 :(得分:1)

一个例子是:

<a href="javascript:void(**do stuff here**)">link</a>

虚空迫使它什么都不返回。如果没有虚空,潜在的某些返回值将导致链接将用户带离页面。