2013-07-11 29 views
19

Spotkałem ten problem czasami, ale wciąż nie wiem, co go powoduje.ReferenceError: zmienna nie jest zdefiniowana

mam ten skrypt na stronie:

$(function(){ 
    var value = "10"; 
}); 

ale przeglądarka mówi „ReferenceError: wartość nie jest zdefiniowana”. Jednak jeśli pójdę do konsoli przeglądarki i wejście albo

10 

lub

var value = "10"; 

któreś z nich może wrócić 10. Na czym polega problem z mojego skryptu?

Edycja: wystarczy pozbyć się "var" może rozwiązać problem.

Odpowiedz

29

Jest zadeklarowany w zamknięciu, co oznacza, że ​​można tam uzyskać dostęp tylko. Jeśli chcesz zmienna dostępna globalnie, można usunąć var:

$(function(){ 
    value = "10"; 
}); 
value; // "10" 

Jest to odpowiednik pisania window.value = "10";.

+0

Hi McGarnagle rozwiązuje ten problem! Dzięki są bardzo różne. Ale jaka jest różnica między z lub bez var –

+1

@LionLiu: Z 'var', jego lokalne do' funkcji' jest zadeklarowane w. Bez 'var', jego globalne. –

+0

Hi @McGarnagle, zadeklarowałem var a = 0 w mojej funkcji gotowej do jquery i wywołałem funkcję z tą zmienną jako parametrem z onsubmit formularza, ale wciąż otrzymywałem błąd referencyjny, jeśli zmienna była globalna, powinna pracowałem jako parametr tej funkcji, ale to nie zadziałało, chciałem tylko znać dokładny powód, jeśli na wszelki wypadek. Dziękuję za Twój czas. – noobcode

4

Zmienne są dostępne tylko w zakresie, w którym je zdefiniowano. Jeśli zdefiniujesz zmienną wewnątrz funkcji, nie będziesz mieć dostępu do niej poza nią.

Zdefiniuj zmienną var poza funkcją (i oczywiście przed nim), a następnie przypisać do niego 10 wewnątrz funkcji:

var value; 
$(function() { 
    value = "10"; 
}); 
console.log(value); // 10 

pamiętać, że nie należy pominąć pierwszy wiersz w tym kodzie (var value;) , ponieważ w przeciwnym razie przypisujesz wartość niezdefiniowanej zmiennej. Jest to zła praktyka kodowania i nie będzie działać w trybie ścisłym. Definiowanie zmiennej (var variable;) i przypisywanie wartości do zmiennej (variable = value;) to dwie różne rzeczy. Nie można przypisać wartości do zmiennej, która nie została zdefiniowana.

To może nie mieć znaczenia tutaj, ale $(function() {}) jest skrótem dla $(document).ready(function() {}), który wykonuje funkcję zaraz po załadowaniu dokumentu. Jeśli chcesz wykonać coś natychmiast, nie potrzebujesz go, w przeciwnym razie pamiętaj, że jeśli uruchomisz go przed wczytaniem DOM, to wartość będzie undefined, dopóki nie zostanie załadowana, więc console.log(value); umieszczony zaraz po $(function() {}) zwróci undefined. Innymi słowy, byłoby wykonać w następującej kolejności:

var value; 
console.log(value); 
value = "10"; 

Patrz także:

0

Got błąd (w init funkcji) z następującymi kod ;

"use strict" ; 

var hdr ; 

function init(){ // called on load 
    hdr = document.getElementById("hdr"); 
} 

... podczas korzystania z przeglądarki akcji na Samsung Galaxy Fame (tragiczne telefonie, który sprawia, że ​​jest to dobry tester) - userAgent; Mozilla/5.0 (Linux; U; Android 4.1.2; en-gb; GT-S6810P Build/JZO54K) AppleWebKit/534.30 (KHTML, podobnie jak Gecko) Wersja/4.0 Mobile Safari/534.30

Ten sam kod działa wszędzie tam, gdzie próbowałem, włączając przeglądarkę zasobów na starszym telefonie HTC - userAgent; Mozilla/5.0 (Linux; U; Android 2.3.5; pl-PL; HTC_WildfireS_A510e Build/GRJ90) AppleWebKit/533,1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533,1

Poprawkę dotyczącą tego była zmiana

var hdr ; 

do

var hdr = null ; 
Powiązane problemy