ReferenceError:未定义变量

时间:2013-07-11 01:19:53

标签: javascript variables definition var

我有时会遇到这个问题,但仍然不知道是什么原因造成的。

我在页面中有这个脚本:

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

但是浏览器说“ReferenceError:value not defined”。但是,如果我转到浏览器控制台并输入

10

var value = "10";

他们中的任何一个都可以返回10.我的脚本有什么问题?

编辑:只需摆脱“var”即可解决问题。

3 个答案:

答案 0 :(得分:32)

它在一个闭包内声明,这意味着它只能在那里访问。如果您想要全局访问变量,可以删除var

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

这相当于写window.value = "10";

答案 1 :(得分:6)

变量仅在您定义的范围内可用。如果在函数内部定义变量,则无法在其外部访问它。

在函数外部使用var定义变量(当然在它之前),然后在函数内部为10赋值:

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

请注意,您不应省略此代码中的第一行(var value;),否则您将为未定义的变量赋值。这是错误的编码实践,不会在严格模式下工作。定义变量(var variable;)并将值赋给变量(variable = value;)是两回事。您无法为尚未定义的变量赋值。

这可能与此无关,但$(function() {})$(document).ready(function() {})的快捷方式,它在加载文档后立即执行函数。如果你想立即执行某些事情,你不需要它,否则要注意如果你在加载DOM之前运行它,那么在加载之前值为undefined,所以console.log(value);放在{ {1}}将返回$(function() {})。换句话说,它将按以下顺序执行:

undefined

另见:

答案 2 :(得分:1)

使用以下代码得到错误(在函数init中);

"use strict" ;

var hdr ;

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

...在三星Galaxy Fame上使用股票浏览器(这是一个很好的测试人员的垃圾手机) - userAgent; Mozilla / 5.0(Linux; U; Android 4.1.2; en-gb; GT-S6810P Build / JZO54K)AppleWebKit / 534.30(KHTML,类似Gecko)版本/ 4.0 Mobile Safari / 534.30

相同的代码适用于我尝试的其他任何地方,包括旧款HTC手机上的股票浏览器 - userAgent; Mozilla / 5.0(Linux; U; Android 2.3.5; zh-gb; HTC_WildfireS_A510e Build / GRJ90)AppleWebKit / 533.1(KHTML,类似Gecko)版本/ 4.0 Mobile Safari / 533.1

解决这个问题的方法是改变

var hdr ;

var hdr = null ;