this.name 与 name 的区别?
代码如下:
```js\n
var object = {
getName: function () {
return function () {
return this.t;
};
}
};
console.log(object.getName()()); //undefined
```
```js\n
var object = {
getName: function () {
return function () {
return t;
};
}
};
console.log(object.getName()()); //ReferenceError: name is not defined
```
问题来了,上面的两中方式,同是访问全局变量中的 name
, 为什么得到的结果却不一样?
5 回复
this 指针是一个对象,所以 this.name 是 undefined。后者 name 未声明,直接调用就会报错。
如果你是在浏览器里运行, 2.
是不会报错的, 因为未声明的全局变量会自动先去匹配window对象的属性. 而window对象上是有name属性的
@kiliwak 好吧!没有注意细节,我改了下问题,谢谢。
问题得到解决:
第一个返回的是值是window对象的一个未赋值的属性,这个undefined是种数据类型。
第二个是试图返回一个未定义的变量,这个根本不能称作全局变量。因为没有声明,解释器去内存中根本找不到name这个东西。
js中允许在声明变量的时候不使用var(实质上没有声明变量,只不过是对window的属性赋值),但是这不代表你可以使用一个未经声明的变量。
感谢你们!
这两种方式访问中,this都是全局对象,浏览器环境中就是window,第一种方式是访问window.t(即window对象的t属性),此时返回undefined,第二种方式直接访问t,此时t是未定义的,所以报ReferenceError。 js中不能直接访问未定义的变量,但可以访问某个对象的未定义属性(结果为undefined)