2013-07-11 19 views
19

Ich habe dieses Problem manchmal, aber immer noch nicht wissen, was es verursacht.ReferenceError: Variable ist nicht definiert

Ich habe dieses Skript auf der Seite:

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

Aber der Browser sagt „Reference: Wert nicht definiert ist“. Allerdings, wenn ich an den Browser-Konsole und Eingang gehen entweder

10 

oder

var value = "10"; 

entweder von ihnen 10. zurückkehren Was ist das Problem mit meinem Skript?

Edit: nur loswerden "var" kann das Problem lösen.

Antwort

29

Es ist innerhalb eines Verschlusses deklariert, was bedeutet, dass es nur dort zugänglich ist.

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

Dies entspricht window.value = "10"; zu schreiben: Wenn Sie eine Variable zugänglich global wollen, können Sie das var entfernen.

+0

Hallo McGarnagle löst es das Problem! Vielen Dank. Aber was ist der Unterschied zwischen mit oder ohne var –

+1

@LionLiu: Mit 'var', ist es lokal zu der' Funktion' in deklariert. Ohne 'var', ist es global. –

+0

Hi @McGarnagle, ich hatte die Variable a = 0 innerhalb meiner jquery ready-Funktion deklariert und rief eine Funktion mit dieser Variable als Parameter von onsubmit des Formulars auf, aber ich bekam immer noch einen Referenzfehler, wenn die Variable global war, sollte es sein habe als Parameter zu dieser Funktion gearbeitet, aber es hat nicht funktioniert, ich wollte nur den genauen Grund wissen, falls Sie es wissen. Vielen Dank für Ihre Zeit. – noobcode

4

Variablen sind nur in dem von Ihnen definierten Umfang verfügbar. Wenn Sie eine Variable innerhalb einer Funktion definieren, können Sie nicht darauf zugreifen.

definieren Variable mit var außerhalb der Funktion (und natürlich auch davor) und weisen Sie dann 10 es innen Funktion:

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

Beachten Sie, dass Sie nicht die erste Zeile in diesem Code auslassen sollte (var value;) , weil Sie ansonsten einer undefinierten Variable einen Wert zuweisen. Dies ist eine schlechte Programmierpraxis und funktioniert nicht im strikten Modus. Das Definieren einer Variablen (var variable;) und das Zuweisen eines Werts zu einer Variablen (variable = value;) sind zwei verschiedene Dinge. Sie können keinen Wert zuweisen, den Sie nicht definiert haben.

Es kann hier irrelevant sein, aber $(function() {}) ist eine Verknüpfung für $(document).ready(function() {}), die eine Funktion ausführt, sobald das Dokument geladen wird. Wenn Sie etwas sofort ausführen möchten, brauchen Sie es nicht. Wenn Sie es vor dem Laden von DOM ausführen, wird der Wert undefined angezeigt, bis console.log(value); platziert wurde, nachdem $(function() {})undefined zurückgegeben wurde. Mit anderen Worten, es wäre in folgenden Reihenfolge auszuführen:

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

Siehe auch:

0

die Fehler erhielt (in der Funktion init) mit folgenden Code;

"use strict" ; 

var hdr ; 

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

... während des Browser Lager mit auf einem Samsung-Galaxie Ruhm (Mist Telefon, das es einen guter Tester macht) - Useragenten; Mozilla/5.0 (Linux; U; Android 4.1.2; de-gb; GT-S6810P Build/JZO54K) AppleWebKit/534.30 (KHTML, wie Gecko) Version/4.0 Mobile Safari/534.30

Derselbe Code funktioniert überall wo ich den Stock Browser auf einem älteren HTC Handy ausprobiert habe - userAgent; Mozilla/5.0 (Linux; U; Android 2.3.5; de-de, HTC_WildfireS_A510e Build/GRJ90) AppleWebKit/533,1 (KHTML, wie Gecko) Version/4.0 Mobile Safari/533,1

Die Lösung für dieses war zu ändern

var hdr ; 

zu

var hdr = null ; 
Verwandte Themen