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()
,您是否同意我的观点,即两者完全没有区别?(我的意思是,如果我们不想要返回值,就不要使用它?)。我认为最初的问题与“副作用”的含义有关,而不是语言特征是否特别有价值。我个人认为它没有什么实际用途,我只是想帮你解释一下这个定义。希望它能帮上忙为什么我需要虚空当我可以的时候?只是另一种方式而已。