任何人都可以向我解释这些表达及其运作方式:
(1, 2, 3) //returns 3
下:
var foo = 0, bar = 'baz';
(foo++,foo++, bar) // foo = 2, returns 'baz'
和
var f = (function f(){ return "1"; }, function g(){ return 2; })();
typeof f; // returns number
因为我从左到右处理了brackers执行中的表达,然后返回最后一项?如果是这样,为什么最后一个例子返回数字?在执行function f(){ return "1"; }
后,它会返回字符串......
答案 0 :(得分:2)
(x, y, z)
表达式只是简单地计算参数并返回最后一个参数。
因此,如果(1, 2, 3)
1
评估为1,2
评估为2,则3
评估为3并返回。
现在在你的第二个例子中:
var foo = 0, bar = 'baz';
(foo++,foo++, bar) // foo = 2, returns 'baz'
它返回baz
,因为bar
是评估和返回的最后一个参数。同时评估两个foo++
但不返回,因此foo值为2
。
现在你的最后一个例子非常简单,但请不要在实践中使用这样的痛苦。 让我简化你的表达:
var f = (function f(){ return "1"; }, function g(){ return 2; })
使其不能自动执行。第一个函数被评估 - 好,第二个被评估并返回。现在,您的f
只是function g()
。当您在()
中包装所有内容并立即执行另一个()
时,您只需执行g()
。
让我分解一下事情:
var f = (function f(){ return "1"; }, function g(){ return 2; })
f
等于function g() { return 2; }
(f)()
返回函数f并立即执行它,从而为您提供2
whith类型当然是Number
。
答案 1 :(得分:1)
当您列出以逗号分隔的多个表达式时,最后一个是结果。
(function f(){}, function g(){}); // returns g
然后你正在执行返回的函数。
(...)(); // executes the function returned in parens
您的函数g
会返回2
,一个数字。