我有時遇到了這個問題,但仍然不知道是什麼原因造成的。ReferenceError:變量未定義
我此腳本的頁面:
$(function(){
var value = "10";
});
但瀏覽器說「的ReferenceError:值沒有定義」。但是,如果我去瀏覽器控制檯輸入要麼
10
或
var value = "10";
其中一方可以返回10.什麼是我的腳本問題?
編輯:剛擺脫「var」就可以解決問題。
我有時遇到了這個問題,但仍然不知道是什麼原因造成的。ReferenceError:變量未定義
我此腳本的頁面:
$(function(){
var value = "10";
});
但瀏覽器說「的ReferenceError:值沒有定義」。但是,如果我去瀏覽器控制檯輸入要麼
10
或
var value = "10";
其中一方可以返回10.什麼是我的腳本問題?
編輯:剛擺脫「var」就可以解決問題。
它在閉包中聲明,這意味着它只能在那裏訪問。如果你想全局變量訪問,你可以刪除var
:
$(function(){
value = "10";
});
value; // "10"
這相當於寫window.value = "10";
。
變量僅在您定義它們的範圍內可用。如果你在一個函數中定義了一個變量,你將無法在其外部訪問它。
定義變量,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
。具有以下
得到了錯誤(在函數初始化):換句話說,它會執行的順序如下:
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 ;
McGarnagle嗨它解決了這個問題!感謝差別很大。但有或沒有var的區別是什麼 –
@LionLiu:用'var',它的局部於'function'聲明。沒有'var',它的全局變量。 –
嗨@McGarnagle,我已經在我的jquery ready函數中聲明瞭var a = 0,並且正在使用這個變量作爲參數從form的onsubmit中調用一個函數,但是仍然得到了引用錯誤,如果變量是全局變量,它應該已經作爲該功能的參數,但它不起作用,我只是想知道確切的原因,如果你知道的話。感謝您的時間。 – noobcode