/ / JavaScript i funkcje samo-wykonujące - javascript, jquery, funkcja

JavaScript i funkcje wykonywane samodzielnie - javascript, jquery, function

Próbuję zrozumieć (prawdopodobnie prostykoncepcje) na temat JS, a ja przygotowałem poniższy fragment kodu, aby wyjaśnić, czego nie dostaję. Nie rozumiem, gdzie jest przechowywana zmienna nazwy. Czy ta zmienna jest teraz globalna?

(function($) {

var name = "";

$.helloWorld = function(yourName) {
name = yourName;
console.log("Hello " + yourName);
}

}(jQuery));

Odpowiedzi:

4 dla odpowiedzi № 1

The name zmienna jest lokalna dla funkcji zewnętrznej, ponieważ jest zadeklarowana za pomocą var słowo kluczowe. Funkcja wewnętrzna to zamknięcie, które zawiera odniesienie do tej zmiennej. Oto lepszy przykład, który to pokazuje:

(function($) {

var name = "";

$.setName = function(newName) {
name = newName;
}

$.showName = function() {
console.log("Name is: " + name);

}(jQuery));

Po zdefiniowaniu tego możesz:

$.setName("Larry");
$.showName();
$.setName("Fred");
$.showName();

Widzieć Jak działają zamknięcia JavaScript?


2 dla odpowiedzi nr 2

To powinno pomóc ci zrozumieć:

(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;

Tak więc w tym fragmencie trzy funkcje są tworzone 3 zakresy, aw głębi wewnętrznej można uzyskać dostęp do zmiennych o unikalnych nazwach (scope1, scope2 i scope3), a także zmiennej lokalnej name, która jest nazwą inną niż ta środkowa. Ponowne użycie nazw zmiennych w celu uniemożliwienia dostępu do zmiennej w zakresie zewnętrznym nazywa się shadowing.

Zauważ, że zmienna, która nie jest zadeklarowana za pomocą var zakłada się, że słowo kluczowe ma zasięg globalny. Deklaracja wielu zmiennych w zasięgu globalnym jest złą praktyką, ponieważ mogą one łatwo powodować konflikty z innymi skryptami.