【发布时间】:2011-08-20 15:11:38
【问题描述】:
我刚刚发现 Firefox 接受了以下(很棒的)语法
f = function(x) x+1;
f(17) //gives 18
有人知道这里到底发生了什么吗?这有什么标准吗?其他浏览器也接受吗? (我测试了 IE 8,它给了我语法错误)
【问题讨论】:
标签: javascript function lambda
我刚刚发现 Firefox 接受了以下(很棒的)语法
f = function(x) x+1;
f(17) //gives 18
有人知道这里到底发生了什么吗?这有什么标准吗?其他浏览器也接受吗? (我测试了 IE 8,它给了我语法错误)
【问题讨论】:
标签: javascript function lambda
【讨论】:
大括号被省略了,就像其他需要一个块的控制结构一样 (if,for)。它是那些标准语法的一部分,也许不是函数的一部分。可以检查一下我猜的规格。
约定是如果省略大括号,则块是下面的单个语句(只有一个语句)。
例如
if(x) g=1;
等价于
if(x){ g=1; }
但是,请注意
if(x) g=1; f=2;
不等同于
if(x){ g=1; f=2; }
其实是
if(x){ g=1; } f=2;
我个人避免使用无括号结构,因为当不知道其工作原理的人修改代码时,它会导致可维护性问题。
【讨论】: