我有时会遇到这个问题,但仍然不知道是什么原因造成的。
我在页面中有这个脚本:
$(function(){
var value = "10";
});
但是浏览器说“ReferenceError:value not defined”。但是,如果我转到浏览器控制台并输入
10
或
var value = "10";
他们中的任何一个都可以返回10.我的脚本有什么问题?
编辑:只需摆脱“var”即可解决问题。
答案 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 ;