2013-07-11 62 views
19

我有時遇到了這個問題,但仍然不知道是什麼原因造成的。ReferenceError:變量未定義

我此腳本的頁面:

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

但瀏覽器說「的ReferenceError:值沒有定義」。但是,如果我去瀏覽器控制檯輸入要麼

10 

var value = "10"; 

其中一方可以返回10.什麼是我的腳本問題?

編輯:剛擺脫「var」就可以解決問題。

回答

29

它在閉包中聲明,這意味着它只能在那裏訪問。如果你想全局變量訪問,你可以刪除var

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

這相當於寫window.value = "10";

+0

McGarnagle嗨它解決了這個問題!感謝差別很大。但有或沒有var的區別是什麼 –

+1

@LionLiu:用'var',它的局部於'function'聲明。沒有'var',它的全局變量。 –

+0

嗨@McGarnagle,我已經在我的jquery ready函數中聲明瞭var a = 0,並且正在使用這個變量作爲參數從form的onsubmit中調用一個函數,但是仍然得到了引用錯誤,如果變量是全局變量,它應該已經作爲該功能的參數,但它不起作用,我只是想知道確切的原因,如果你知道的話。感謝您的時間。 – noobcode

4

變量僅在您定義它們的範圍內可用。如果你在一個函數中定義了一個變量,你將無法在其外部訪問它。

定義變量,var功能外(和之前當然它),然後分配給10這裏面的功能:

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

注意,你不應該忽略這個代碼的第一行(var value;) ,因爲否則您將值賦給未定義的變量。這是不好的編碼習慣,不能在嚴格模式下工作。定義變量(var variable;)並將值賦給變量(variable = value;)是兩件不同的事情。您無法將值分配給您尚未定義的變量。

這裏可能沒什麼關係,但$(function() {})$(document).ready(function() {})的快捷方式,只要加載文檔就會執行該功能。如果您想立即執行某些操作,則不需要它,否則請注意,如果您在DOM加載之前運行它,則值將爲undefined,直到它已加載爲止,因此在$(function() {})之後放置的console.log(value);將返回undefined。具有以下

0

得到了錯誤(在函數初始化):換句話說,它會執行的順序如下:

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

也見代碼;

"use strict" ; 

var hdr ; 

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

...同時採用了三星galaxy名人堂(廢話電話這使它成爲一個優秀的測試人員)的股票瀏覽器 - 的userAgent; Mozilla/5.0(Linux; U; Android 4.1.2; en-gb; GT-S6810P Build/JZO54K)AppleWebKit/534。30(KHTML,像壁虎)版本/ 4.0移動Safari/534.30

相同的代碼在其他地方工作,包括舊手機上的股票瀏覽器 - userAgent; 的Mozilla/5.0(Linux的; U;的Android 2.3.5;烯GB; HTC_WildfireS_A510e構建/ GRJ90)爲AppleWebKit/533.1(KHTML,例如Gecko)版本/ 4.0移動Safari/533.1

此的修復是改變

var hdr ; 

var hdr = null ; 
相關問題