繁体   English   中英

Javascript:为什么全局作用域中的变量成为其“ this”的属性,但在新对象的功能范围内的变量中未发生

[英]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结果未定义。

  1. 为什么声明在全局命名空间中的变量,使该变量成为一个属性this (全局命名空间=窗口)?
  2. 为什么在创建新对象时在功能范围内没有发生第1项的行为?

为什么在全局名称空间中声明变量会使该变量成为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM