Javascript 究竟是什么表达式产生了*副作用*?

Javascript 究竟是什么表达式产生了*副作用*?,javascript,Javascript,我无法理解页面中的这一段: 此运算符允许插入 产生副作用的表达式 把一个表达变成 如果需要,则计算为未定义 究竟什么表达式会产生副作用?一个简单的例子是函数调用。如果您需要一个“未定义”的值,但是您还想调用一个(比如)执行一些DOM操作的函数,那么您可以将结果“强制转换”到void,并获得一个未定义的结果 我绝对不认为这是语言的“好部分”,尽管它确实绕过了“未定义”并不是一个真正保留的单词这一奇怪的事实。表达式void 0肯定是真正的未定义。副作用是void作为参数的函数的结果。在这种情况下,函

我无法理解页面中的这一段:

此运算符允许插入 产生副作用的表达式 把一个表达变成 如果需要,则计算为未定义


究竟什么表达式会产生副作用?

一个简单的例子是函数调用。如果您需要一个“未定义”的值,但是您还想调用一个(比如)执行一些DOM操作的函数,那么您可以将结果“强制转换”到
void
,并获得一个未定义的结果


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

副作用是void作为参数的函数的结果。在这种情况下,函数F1返回“false”,但将其包装在“void”中实质上“吞咽”了该结果或“副作用”:

var F1 = function() { return false; }
void(F1());
请原谅我无缘无故地引用。。。哈哈。

一个例子是:

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

空虚迫使它不返回任何东西。如果没有空值,一些返回值可能会导致链接将用户从页面中带走。

表达式
(i+=1)
的计算结果为
i+1
,但会产生将
i
增加1的副作用


void
的目的不是掩盖副作用,而是专门针对需要副作用但不需要表达式结果的情况。

函数通常做两件事:执行某项操作和返回值。有些函数只做其中一件事,有些函数同时做这两件事。例如,函数:

function square(x) {
  return x * x;
}
它没有副作用,因为它所做的只是返回一个值,并且它的调用总是可以被它的返回值替换。另一方面,像
alert()
这样的东西只会因其副作用(提醒用户)而被调用,而不会因其返回值而被调用


所以,
void
操作符所做的就是让JavaScript忽略返回值,并声明您感兴趣的只是函数的副作用。

那么为什么我需要void呢?我的意思是,我可以简单地让它返回一个值,但不要正确地使用它。几乎所有的事情都可以通过多种方式完成。这只是一种方法。它在现实中并没有得到太多的使用。那么你是说
void
的唯一用途就是可靠地给我们提供
未定义的
?(因为
undefined
不是关键字实际上可能会被另一个值替换)这就是它所做的一切。我也有“void”操作符可能带给你的神秘感,我不明白。如果我不想要表达式的结果,我只是不使用返回结果?那么为什么我需要虚空呢?如果我想让它返回一个未定义的,我只需编写returnundefined;这也行。但有时候你不需要多个语句。你可能永远不会在现实生活中使用这种“空虚”的把戏!在您的示例中,如果您将第二行替换为
F1()
,您是否同意我的观点,即两者完全没有区别?(我的意思是,如果我们不想要返回值,就不要使用它?)。我认为最初的问题与“副作用”的含义有关,而不是语言特征是否特别有价值。我个人认为它没有什么实际用途,我只是想帮你解释一下这个定义。希望它能帮上忙为什么我需要虚空当我可以的时候?只是另一种方式而已。