不寻常的JavaScript语法

Fun*_*ork 28 javascript

有人可以向我解释一下这里的第二行是怎么回事吗?:

var foo = function(){alert("hello?")};
(0,foo)();
Run Code Online (Sandbox Code Playgroud)

Kos*_*Kos 38

臭名昭着的逗号表达式a,b计算两个参数并返回右侧表达式的值.

因此,在这种情况下,它完全相同foo();.

这是一个更好的例子,可以帮助您了解正在发生的事情:

function foo() {
    print("foo called");
    return 123;
}
function bar() {
    print("bar called");
    return 456;
}
var result = (foo(), bar());
print("result:", result);
Run Code Online (Sandbox Code Playgroud)

输出:

foo called
bar called
result: 456
Run Code Online (Sandbox Code Playgroud)

逗号表达式也可能与逗号分隔函数参数混淆.不一样!注意区别:

print("result:", foo(), bar() ); // 3 arguments, no comma operator
print("result:", (foo(), bar()) ); // 2 arguments, comma operator
Run Code Online (Sandbox Code Playgroud)

  • (逗号运算符也有未记录的功能,当有人输入错误时会导致有趣的错误.) (7认同)
  • 或者右侧可能已被替换.(0,eval)()是一种调用间接evals的方法,用于保护全局范围http://stackoverflow.com/questions/9107240/1-evalthis-vs-evalthis-in-javascript (2认同)

Dzi*_*owy 9

它正在评估第一个括号中的两个表达式并执行第二个表达式(在本例中是一个函数).

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Comma_Operator