括号和js表达式执行

时间:2014-02-21 12:30:06

标签: javascript

任何人都可以向我解释这些表达及其运作方式:

(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"; }后,它会返回字符串......

2 个答案:

答案 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; })

  1. f等于function g() { return 2; }

  2. (f)()返回函数f并立即执行它,从而为您提供2 whith类型当然是Number

答案 1 :(得分:1)

当您列出以逗号分隔的多个表达式时,最后一个是结果。

(function f(){}, function g(){});  // returns g

然后你正在执行返回的函数。

(...)(); // executes the function returned in parens

您的函数g会返回2,一个数字。

相关问题