首先window是一个全局对象。先看一下结果:
相同情况:
var a = 1 //function(){console.log(this)}
window.a = 2 //function(){console.log(this)}
测试结果 constructor和proto和this指向(window)都一样
不同情况:
第一种情况:
结果是undefined
第二种情况:
结果是报错信息 c is not defined
第三种情况:
console.log(window.a); --> undefined
console.log(b.a) -->b is not undefined //由于b不是已经存在的对象所以会报错
现在来说一下原因:
1.首先window是全局对象,所以第三种情况中你想打印window中的a,由于window是全局中存在的对象,他是存在的。所以不会显示未定义。只不过是他的属性a是不存在的。就比如下列这种情况:
2.第二种情况 如果你想直接打印c,他会默认c是一个变量。但是c在全局中没有声明。所以会有报错信息。
3.第一种情况,是由于d是利用var定义好的变量,但是没有给他赋值,所以初始值为undefined。
热门工具 换一换