2013-07-11 56 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 ; 
相关问题