Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不寻常的javascript语法_Javascript - Fatal编程技术网

不寻常的javascript语法

不寻常的javascript语法,javascript,Javascript,有人能给我解释一下第二行是怎么回事吗 var foo = function(){alert("hello?")}; (0,foo)(); 臭名昭著的逗号表达式a,b计算两个参数并返回右侧表达式的值 因此,在本例中,它与foo()完全相同 这将帮助您了解发生了什么: function foo() { print("foo called"); return 123; } function bar() { print("bar called"); return 456

有人能给我解释一下第二行是怎么回事吗

var foo = function(){alert("hello?")};
(0,foo)();

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

因此,在本例中,它与
foo()完全相同

这将帮助您了解发生了什么:

function foo() {
    print("foo called");
    return 123;
}
function bar() {
    print("bar called");
    return 456;
}
var result = (foo(), bar());
print("result:", result);
输出:

foo called
bar called
result: 456
此外,逗号表达式可能与逗号分隔函数参数混淆。不一样!请注意区别:

print("result:", foo(), bar() ); // 3 arguments, no comma operator
print("result:", (foo(), bar()) ); // 2 arguments, comma operator

它计算第一个括号中的两个表达式并执行第二个表达式(在本例中为函数)


因为javascript中的逗号运算符计算多个操作数并返回最后一个操作数。MDN:

逗号运算符计算其两个操作数(从左到右)并返回第二个操作数的值

您的表达式
(0,foo)


返回
foo
,然后该操作被paradensis调用,放在后面。

逗号将计算操作数并返回最后一个操作数


第二行将返回foo

@ubercooluk–那里根本没有jQuery的迹象。@Alex-不,没有。没有包含任何变量。你把函数表达式和闭包混淆了吗?函数表达式通常用于创建闭包,但它们不是一回事。@Funky,你确定
foo
是这样定义的,并且不是对象方法(
(0,obj.foo)(
)?如果是这样的话,调用语义就不一样了。(逗号运算符还有一个未记录的特性,当有人输入错误时,它会导致有趣的错误。)谢谢@Kos,你的解释是有道理的。该代码段基于一个复杂且编写良好的第三方工具的代码,但过于复杂。我想可能0曾经是一个更重要的东西,被0替换为占位符?或者右边可能被替换了。(0,eval)()是一种调用间接eval的方法,用于保护全局范围