[英]Javascript: Why variable in global scope becomes property of its 'this' but it doesn't happen on variable inside functional scope for new object
当我在Chrome浏览器上运行以下代码时,我发现在全局名称空间上声明变量与在新对象的功能名称空间内声明变量之间存在不同的行为。
1. var ss = 'text';
2. console.log(this.ss);
3. function Person(first){
4. console.log('inside');
5. console.log(this);
6. this.firstName = first;
7. var second = 'Qui';
8. console.log(this.second);
9. }
10. var person1 = new Person('Leo');
在第1行,我声明变量ss
,并且变得的属性this
(全局命名空间=窗口)。 我在第2行上打印this.ss
进行确认。
在第7行,我声明了second
变量,但是它没有成为this
(Person对象的函数名称空间)的属性。 在第8行,我打印this.second
结果未定义。
this
(全局命名空间=窗口)? 为什么在全局名称空间中声明变量会使该变量成为this(global namespace = Window)的属性?
因为this
在全局范围内是对变量所在对象的引用。
为什么在创建新对象时在功能范围内没有发生第1项的行为?
因为this
在函数作用域中的行为与在全局作用域中的行为不同。
在具有this
绑定的函数中,其值由函数的调用者确定,并且可能几乎与任何对象(甚至严格模式下的基元)相同。
声明函数局部变量确实会使它在该函数作用域内,但不会使其成为函数对象的属性。 使用this
关键字时,您将函数作为object
引用,因此可以将变量分配为该对象的属性。
this
在全局范围内是对变量所在对象的引用。
全局名称空间=窗口。 你自己说的
在具有this
绑定的函数中,其值由函数的调用者设置
进一步阅读
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/this
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.