2016-03-04 2 views
0

Ниже я приложил выдержку из главы 10 книги Eloquent JavaScript.Не могу понять эту конструкцию JavaScript

var dayName = function() { 
    var names = ["Sunday", "Monday", "Tuesday", "Wednesday", 
     "Thursday", "Friday", "Saturday" 
    ]; 
    return function (number) { 
     return names[number]; 
    }; 
}(); //==> '();' this construct right here.... 

console.log(dayName(3)); 

То, что я не могу понять, почему эта функция имеет косую ();?

Что это такое? Я попытался найти ответ, но я не знаю, что искать.

Может кто-нибудь объяснить мне, почему эта конструкция добавлена ​​в конце? Любая помощь будет неоценимой.

+0

@Tushar Но разве это называется здесь @ "console.log (DAYNAME (3));" – SRINI794

ответ

3

Вызвать функцию немедленно и присвоить возвращаемое значение переменной.

var name = function() { 
    // Function body 
}(); 

В вашем случае функция возвращает другую функцию. Таким образом, функция dayName является возвращенной функцией, имеющей доступ к переменной names.

Внутренняя функция closure и, следовательно, имеют доступ к внешним переменным функции.

Другими словами, функция

var dayName = function (number) { 
    return names[number]; 
}; 

с наличием доступа к частной переменнойnames.

Также см

  1. What is the (function() { })() construct in JavaScript?
  2. How do JavaScript closures work?
Смежные вопросы