2013-06-03 6 views
4

В JavaScript отпадение конца функции возвращает undefined; если вы хотите вернуть значение, вам нужно использовать явный оператор return.Возврат значения без явного оператора возврата

По крайней мере, это было до сих пор, но похоже, что ECMAScript 6 будет по крайней мере иногда позволять опустить return.

В каких обстоятельствах это будет иметь место? Будет ли это связано с различием между function и => или есть ли другой критерий?

+1

Ключевое слово 'new' уже работает в предыдущих версиях ES :-) – Bergi

+0

Когда это изменение в ECMAScript 6 просачивается в javascript, поддерживаемый современными браузерами? Кроме того, что вы имеете в виду «возвращение», которое нужно опустить? Невозможно вернуть в текущем javascript опуститься: «В JavaScript отпадение конца функции возвращает undefined»? Вы имеете в виду возврат значения, даже если возврат опускается? Просьба уточнить. –

+0

@meewoK Я имею в виду, что впечатление, которое я получаю от того, что мне удалось найти, заключается в том, что вы не можете написать функцию-преемник как 'function (x) {x + 1}', но вы сможете записать ее как ' x => x + 1', но я не знаю, каков точный критерий разницы. – rwallace

ответ

5

Настоящим материалом на эту тему является новейшая ES Harmony specification draft, а именно деталь, полученная от arrow function syntax proposal. Для удобства, неофициальную версию HTML можно найти here.

Вкратце, этот новый синтаксис позволит более четко описать функции. В проекте ES spec есть все детали, я объясню здесь очень грубо.

Синтаксис является

ArrowParameters => ConciseBody 

ArrowParameters часть определяет аргументы, что функция принимает, например:

()     // no arguments 
arg     // single argument (special convenience syntax) 
(arg)    // single argument 
(arg1, arg2, argN) // multiple arguments 

ConciseBody часть определяет тело функции. Это может быть определено либо так, как оно всегда было определено, например.

{ alert('Hello!'); return 42; } 

или в частном случае, когда функция возвращает результат вычисления одно выражение, как это:

theExpression 

Если это звучит довольно абстрактно, вот конкретный пример. Все эти определения функции будут идентичны по текущему проекту спецификации:

var inc = function(i) { return i + 1; } 
var inc = i => i + 1; 
var inc = (i) => i + 1; 
var inc = i => { return i + 1; }; 

Как и в сторону, этот новый синтаксис точно такой же большой синтаксис, который использует C#, чтобы определение функции лямбда.