我的javascript中发生了一些奇怪的事情,我不明白。谁能解释一下?
var adsl2pSpeed = '9500 - 12500';
alert(adsl2pSpeed);
if (!adsl2pSpeed) {
alert(adsl2pSpeed);
var adsl2pSpeed = 'Unknown';
}
var speed = document.getElementById("PredictedSpeed");
speed.innerHTML = adsl2pSpeed + " b/s";
这会两次警告“Undefined”并将innerhtml设置为“Unknown”。如果我注释掉if语句,它会提醒'9500 - 12500'并将innerHTML设置为'9500 - 12500'。发生了什么?字符串是否被转换为对象,因此它变为空?
编辑:我实际上是将adsl2pSpeed注册为不在该函数中的启动脚本。为了清晰起见,我提出了它,但可能是问题?
答案 0 :(得分:5)
猜测:
缩进代码在函数中。
if (!adsl2pSpeed) {
alert(adsl2pSpeed);
var adsl2pSpeed = 'Unknown';
}
你在该函数中声明一个局部变量,它掩盖了全局变量,所以它看起来是“未定义的”。
尝试删除var
以避免创建新变量。
答案 1 :(得分:0)
我认为Thilo是对的。 如果代码在以下函数中:
var adsl2pSpeed = '9500 - 12500';
function test() {
alert(adsl2pSpeed);
if (!adsl2pSpeed) {
alert(adsl2pSpeed);
var adsl2pSpeed = 'Unknown';
}
var speed = document.getElementById("PredictedSpeed");
speed.innerHTML = adsl2pSpeed + " b/s";
}
// some code runs ...
test();
然后adsl2pSpeed
语句中if
的声明被“提升”到函数的顶部,因此该函数实际上被解释为:
function test() {
var adsl2pSpeed; // declaration hoisted to the top, shadows the global var
alert(adsl2pSpeed);
if (!adsl2pSpeed) {
alert(adsl2pSpeed);
adsl2pSpeed = 'Unknown'; // assignment to local var
}
var speed = document.getElementById("PredictedSpeed");
speed.innerHTML = adsl2pSpeed + " b/s";
}
本文解释了它:http://bustingseams.blogspot.com/2009/08/another-javascript-pitfall-hoisting.html