2014-02-18 1 views
12

Я инициировал JavaScript/JQuery клик слушателя, как это:Почему этот синтаксис JavaScript не поддерживается в Google Chrome?

$("#test").on("click",() => { 
    console.log("test"); 
}); 

Этот фрагмент кода отлично работает в Firefox, но в Chrome это, кажется, дает мне ошибку синтаксиса. Почему это так, поскольку для меня это выглядит как «ok».

Вы можете проверить это быстро в консоли, делая

var a =() => {return 0;} 
a(); 

В Firefox 27.0.1 это возвращает 0 В Chrome возвращает SyntaxError: Unexpected token)

+4

Какой у вас фон, чтобы лямбда-выражения были «синтаксисом для вас»? Все взволнованы тем, что наконец-то в проекте, но требуется время, пока проект не будет принят, и функция будет реализована. Раньше в javascript никогда не было лямбда. –

+0

@WiktorZychla - Возможно, он получил это [от CoffeeScript] (http://coffeescript.org/#fat-arrow)? Впрочем, догадка. –

+0

@JamesAllardice: или TypeScript, вот почему мне интересно. –

ответ

32

жира стрелка является a feature of ES6 (теперь официально называется ECMAScript 2015). Он был введен в Firefox, но еще не в других браузерах (и особенно not completely in V8, что было бы интересно для разработки nodejs/iojs).

Поскольку это в основном сахар, вам лучше подождать, прежде чем использовать его.

Если необходимо область связывания (this это же в вызове функции и в области, в которой функция была определена, мы говорим о «лексического это»), то вместо

$("#test").on("click",() => { 
    some code 
}); 

вы можете просто сделать

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

Если вы не (как в вашем примере), а затем просто сделать

$("#test").on("click", function() { 
    console.log("test"); 
}); 
+0

spot on :-) хороший пример привязки области – imma

+0

Во втором примере вам не нужна скобка вокруг функции. '$ (" # test "). on (" click ", function() { некоторый код } .bind (this));' Действителен –

+0

@ plus- right, но это происходит только потому, что он находится в месте, где выражение (вы не можете иметь 'function() {some code} .bind (this)' outside или в консоли). Точно так же, как с точкой с запятой, я предпочитаю держать один всегда рабочий синтаксис. На мой взгляд, это также легче читать. –

 Смежные вопросы

  • Нет связанных вопросов^_^