最近学习到js的变量声明提前部分,然后搜索看看网上的文章,然后发现了一个非常好玩的东东
var a = 1;
var a;
alert(typeof a);
(function () {
b = '-----';var b;
})();
alert( typeof b);
根据声明提前的规则结果是
number
undefined
接着看如下代码段:
name="aaa";
function test(){
alert(typeof name);
var name="bbb";
alert(typeof name);
}
test();
结果是
undefined
string
接下来是最好玩的
alert(typeof name);
var name="hello world";
alert(typeof name);
请问结果应该是什么?
按照规则
undefined
string
没错,我也是这样想的,但是,请自行在浏览器中尝试
得到的结果却是
string
string
如果你的不是,那么恭喜你,你应该用的是ie浏览器,
因为
在chrome 中(包括基于它的一系列国产浏览器)
name 有默认值,是个空字符串
那么这个空字符串来自哪里呢?
答案是来自
window.name
默认值就是个空字符串
所以在测试的时候一定要起个奇怪的变量名才不容易被其他因素误导,
比如
汉语拼音-
参考资料
JavaScript变量声明提前
在JavaScript中特殊的变量
window.name