奇怪的js 变量声明提前

最近学习到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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容