我有时会遇到这个问题,但仍然不知道是什么原因造成的。
我在页面中有这个脚本:
$(function(){
var value = "10";
});
但浏览器显示“ReferenceError:未定义值”。但是,如果我转到浏览器控制台并输入
10
或者
var value = "10";
他们中的任何一个都可以返回 10。我的脚本有什么问题?
我有时会遇到这个问题,但仍然不知道是什么原因造成的。
我在页面中有这个脚本:
$(function(){
var value = "10";
});
但浏览器显示“ReferenceError:未定义值”。但是,如果我转到浏览器控制台并输入
10
或者
var value = "10";
他们中的任何一个都可以返回 10。我的脚本有什么问题?
它是在闭包内声明的,这意味着它只能在那里访问。如果您想要一个全局可访问的变量,您可以删除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
一直到它加载为止,所以console.log(value);
放在后面$(function() {})
会 return undefined
。换句话说,它将按以下顺序执行:
var value;
console.log(value);
value = "10";
也可以看看:
使用以下代码得到错误(在函数 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, like Gecko) Version/4.0 Mobile Safari/534.30
相同的代码适用于我尝试过的其他任何地方,包括旧 HTC 手机上的股票浏览器 - userAgent;Mozilla/5.0 (Linux; U; Android 2.3.5; en-gb; HTC_WildfireS_A510e Build/GRJ90) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
解决这个问题的方法是改变
var hdr ;
至
var hdr = null ;