gpt4 book ai didi

javascript - 为什么函数声明不是语句而变量声明是

转载 作者:行者123 更新时间:2023-11-30 12:41:54 27 4
gpt4 key购买 nike

这似乎是一个愚蠢的问题,但我真的无法理解它。当我在思考为什么变量声明后有分号而函数声明后没有分号时,我开始疑惑。那么这是否意味着函数声明是一个表达式?

statement 的官方含义是什么?我一直在寻找答案,说语句是告诉计算机做什么的“命令”,但是函数声明不是告诉计算机做什么的吗?跟执行代码时加载的时候有关系吗?

最佳答案

I began to wonder this when I was thinking of why there is a semicolon after variable declaration but not function declaration

Not every statement ends with a semicolon .

带有尾随分号的语句示例:

  • 变量声明:var foo = <expression>;
  • 表达式语句:<expression>;
  • 执行 while 循环:do <statement> while (<expression>);

没有尾随分号的示例:

  • If 语句:if (<expression>) <statement>
  • try catch 语句:try <block> catch (<identifier>) <block>
  • For 循环:for (...) <statement>
  • block 语句:{ <statement list> }

So does that mean a function declaration is an expression?

不,它比这更复杂。函数声明不是 语句。它们也不是表达式,它们是 source elements .语句和函数声明都是源元素。 **


And what is the official meaning for statement?

我不能告诉你官方定义,但在 JS 的上下文中,我会说“这是一条不产生可分配结果/值的指令”。另一方面,表达式产生的结果可用于其他表达式。


** 很高兴知道,但有点题外话:由于函数声明不是语句,因此技术上不允许在 block 内使用它们。如果我们还考虑提升,这一点会变得更加明显。这个例子应该会在每个浏览器中抛出一个语法错误,但不幸的是它不会。

if (true) {
function foo() { alert('foo'); }
} else {
function foo() { alert('bar'); }
}
foo();

这会导致在不同的浏览器中出现不同的行为。而 Chrome 将显示 bar , Firefox 会显示 foo . Chrome 只是提升了两个函数声明,第二个覆盖了第一个。 Firefox 将这两个声明解释为类似于函数表达式

Try it yourself在不同的浏览器中。

关于javascript - 为什么函数声明不是语句而变量声明是,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24147429/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com