2014-04-15 3 views
0

я сделал серию экспериментов в nodejs консоли:Может `функция a() {}` рассматриваться как сокращенное выражение `a = function a() {}`?

> function a(){} 
undefined 

> a 
[Function: a] 

> a.name 
'a' 

> b = function(){} 
[Function]    // see, the name is empty 

> b.name 
''      // further proof 

> b = function b(){} 
[Function: b] 

> b.name 
'b'      // now b behaves just like it's defined 
         // by "function b(){}" 

Судя из того, что я могу проверить, function a() {} служит стенографии из a = function a() {}. Это то, как внутренние двигатели, такие как V8? Есть ли разница между a и b в приведенном выше эксперименте?

ответ

-2

В основном то, что вы делаете в a, просто объявляет функцию, тогда как для b вы объявляете функцию и в той же строке, которая определяет ее снова как b. Чтобы доказать это, вы можете попробовать что-то вроде следующего:

a = function b(){} 
a.name // results in b 

Так на самом деле вы можете избежать объявления и присвоения и просто объявить функцию, как вы делаете с a. Чтобы ответить на ваш вопрос, вторая форма - это более длинный, ненужный способ написания первой формы.

+0

Интересно отметить, что в этом примере 'b', даже если он объявлен, он не может ссылаться на это имя, поскольку он находится в правой части знака равенства. –

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