Опитвам се да разбера (вероятно простоконцепции) за JS, и аз съм поставил заедно по-долу част от кода, за да обясня какво не получавам. Това, което не разбирам е къде се съхранява променливата на името. Дали тази променлива сега е глобална?
(function($) {
var name = "";
$.helloWorld = function(yourName) {
name = yourName;
console.log("Hello " + yourName);
}
}(jQuery));
Отговори:
4 за отговор № 1Най- name
променливата е локална към външната функция, защото е декларирана с var
ключова дума. Вътрешната функция е затваряне, което съдържа препратка към тази променлива. Ето по-добър пример, който показва това:
(function($) {
var name = "";
$.setName = function(newName) {
name = newName;
}
$.showName = function() {
console.log("Name is: " + name);
}(jQuery));
След като дефинирате това, можете да го направите:
$.setName("Larry");
$.showName();
$.setName("Fred");
$.showName();
виждам Как функционират JavaScript затварянията?
2 за отговор № 2
Това трябва да ви помогне да разберете:
(function(){
var name;
var scope1;
// Here you can use scope1 and name
(function(){
var name; // <------------------------
var scope2; // |
// |
// Here you can use scope1,scope2, and name
(function(){
var name; // <------------------------------
var scope3; // |
// |
// Here you can use scope1,scope2,scope3, and name
})();
})();
})();
// Anyvariable declared outside of any function scope is in the global scope.
// A variable declared here can be accessed by window.name from any scope
var name = 5;
Така в този фрагмент се създават 3 обхвата от трите функции и в най-вътрешното можете да получите достъп до променливите, които имат уникални имена (scope1, scope2 и scope3), както и локалната променлива. name
, което е отделно име от това, което е средният обхват. Повторното използване на имена на променливи като тези за предотвратяване на достъп до променливата във външен обхват се нарича сенкиране.
Обърнете внимание, че променлива, която не е декларирана с var
ключова дума се приема автоматично за глобално. Лоша практика е да се декларират много променливи в глобалния обхват, тъй като те лесно могат да се конфликтуват с други скриптове.