2016-02-08 2 views
3

Я проверил это в консоли:Почему этот объект javascript с простейшим конструктором не определен?

var toto = (function() {function toto() {}})(); 
toto 

Результат хромированной консоли

undefined 

Почему? Я бы ожидал, как обычно, конструктора:

function toto() {} 

Какую синтаксическую ошибку я сделал?

+2

Ваш вызов IEFE ничего не возвращает. – Bergi

+0

Нет синтаксической ошибки, если бы она была, она была бы в консоли. –

+0

Почему вы это делаете? – Bergi

ответ

2

Если вы запустите этот код, я верю, что это даст вам ответ.

var noname = (function() { 
    function toto() { 
     console.log('running toto'); 
     return 'returning toto'; 
    } 
    console.log(toto()); 
    return 'no name'; 
})(); 
console.log(noname); 

Более длинный ответ следующий.

(function(){})(); 

Это называется IIFE (выражение, вызываемое мгновенно вызывается), которое оно создает и вызывает функцию сразу после ее создания. То, что вы размещаете в нем, содержится в этой функции. Это лучший способ создать частные переменные в ES5 Javascript. Как и все функции, вы можете возвращать вещи из IIFE и получать доступ к переменным, объявленным за пределами IIFE, но ничего извне снаружи, опять же создает личную область. Поскольку у вас есть возврат IIFE, он возвращает значение по умолчанию undefined.

2

Вы забыли areturn.

var toto = (function() {return function toto() {}})(); 

return'ed значение, что присваивается переменной, если не возвращает никакого ВПО заявление, то возвращаемое значение не определено .

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