为什么不是';Google Chrome不支持这种JavaScript语法吗?

为什么不是';Google Chrome不支持这种JavaScript语法吗?,javascript,jquery,google-chrome,arrow-functions,Javascript,Jquery,Google Chrome,Arrow Functions,我启动了一个JavaScript/jQuery点击监听器,如下所示: $("#test").on("click", () => { console.log("test"); }); 这段代码在Firefox中运行得非常好,但在Chrome中,这似乎给了我一个语法错误。 为什么会这样,因为我觉得这是“ok”语法 您可以通过执行以下操作在控制台中快速测试 var a = () => {return 0;} a(); 在Firefox 27.0.1中,返回0 在Chrome中

我启动了一个JavaScript/jQuery点击监听器,如下所示:

$("#test").on("click", () => {
   console.log("test");
});
这段代码在Firefox中运行得非常好,但在Chrome中,这似乎给了我一个语法错误。 为什么会这样,因为我觉得这是“ok”语法

您可以通过执行以下操作在控制台中快速测试

 var a = () => {return 0;}
 a();
在Firefox 27.0.1中,返回0
在Chrome中,它返回
SyntaxError:Unexpected token)

胖箭头是(现在正式称为ECMAScript 2015)。它已经在Firefox中引入,但还没有在其他浏览器中引入(尤其是对于nodejs/iojs开发来说,这会很有趣)

因为它主要是糖,你最好等一下再用

如果您需要范围绑定(
在函数调用和定义函数的范围中是相同的,我们称之为“词法绑定”),那么

$("#test").on("click", () => {
   some code
});
你可以简单地做

$("#test").on("click", (function() {
   some code
}).bind(this));
$("#test").on("click", function() {
   console.log("test");
});
如果您没有(如您的示例中所示),那么只需执行即可

$("#test").on("click", (function() {
   some code
}).bind(this));
$("#test").on("click", function() {
   console.log("test");
});

您有什么样的背景使得lambda表达式“对您来说是正确的语法”?每个人都很高兴它最终出现在草案中,但在草案被接受和功能实现之前需要时间。以前javascript中从来没有lambdas。@WiktorZychla-也许他得到了它?不过只是猜测而已。@jamesalardice:或TypeScript,这就是我好奇的原因。@WiktorZychla不,lambdas已经存在很久了-这只是一种新语法;-)例如:var a=function(){return 0;}。。。还有$(“#test”).on(“click”,function(){console.log(“test”)})@imma:大多数被问到有什么区别的人不会因为“lambda”通常指的是新的“arrow语法”而将匿名函数识别为“lambda”。从技术上讲,你是对的,但问题是关于新语法的。在第二个示例中,你不需要在函数周围加括号<代码>$(“#测试”)。在(“单击”,function(){some code}.bind(this))是valid@plus-是的,但这只是因为它位于需要表达式的位置(您不能在外部或控制台中使用
function(){some code}.bind(this)
)。就像分号一样,我更喜欢保持一个始终有效的语法。在我看来,它也更容易阅读。默认情况下,使用箭头语法定义的函数绑定到窗口。它们的等价物是
function(){some code}.bind(Window)
@MarcoLuglio你搞错了。请看一看真棒!!。我最近在Chrome(48.0.2564.97版(64位))上试用过,发现它可以工作。看一看。