【问题标题】:Javascript: Comma operator, var, and scope - why does it work the way it does?Javascript:逗号运算符、var 和作用域——为什么它会这样工作?
【发布时间】:2012-05-27 02:34:34
【问题描述】:

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

(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 应该在全局范围内结束。

【问题讨论】:

    标签: javascript scope operator-precedence


    【解决方案1】:

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

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

    【讨论】:

    猜你喜欢
    • 2016-10-04
    • 2018-12-28
    • 2022-06-09
    • 2022-11-25
    • 2014-03-18
    • 2010-09-14
    • 2010-09-08
    相关资源
    最近更新 更多