Javascript:逗号运算符、var 和作用域 - 为什么它会这样工作?

标签 javascript scope operator-precedence

逗号运算符计算每个逗号分隔的操作数(并返回最后一个操作数的值)。

(i = 1 + 2), (j = 3 + 4);

在功能上等同于

i = 1 + 2;
j = 3 + 4;

此外,据我所知,诸如 var 之类的语句不被视为运算符,而是操作数的一部分。 (参见https://developer.mozilla.org/en/JavaScript/Reference/Operators/Operator_Precedence)

因此,如果每个操作数都被单独评估,那么为什么会这样做

function foobar () {
    var i = 3, j = 7, z;
}

在 foobar 的作用域中创建 3 个变量 - i、j 和 z?

我知道这就是实际发生的情况,但我一直想知道为什么会发生这种情况。看起来 i 应该在 foobar 的范围内,但 j 和 z 应该在全局范围内。

最佳答案

var 语句中使用的逗号实际上并不是逗号运算符。

同样,在函数调用中用于分隔参数的逗号也不是逗号运算符。

关于Javascript:逗号运算符、var 和作用域 - 为什么它会这样工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10670915/

相关文章:

vb6 - Visual Basic 6.0 中的运算符优先顺序是什么?

c++ - 职能范围是什么意思?

haskell - 在 Template Haskell AST 中重新关联树

javascript - knockout.js css 绑定(bind) - 如何添加焦点等元素状态?

javascript - 在jquery中仅触发一次提交按钮(通过代码而不是通过鼠标单击或按键)

python - 从类定义中的列表理解访问类变量

python - 了解 Python 类中的变量范围

java - 运算符优先级算法

javascript - laravel 完整日历不适用于主题 JQuery 和 Bootstrap

javascript - 为什么只有第一个正则表达式可以正常工作?