Javascript:为什么全局范围内的变量成为其'this'的属性,但它不会发生在新对象的函数范围内的变量上



当我在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的属性(人物对象的函数命名空间)。在第8行上,我打印this.second,结果未定义。

  1. 为什么在全局名称空间上声明变量使该变量成为this的属性(全局名称空间=窗口)?
  2. 为什么在创建新对象时,项目1上的行为不会发生在功能范围内?

为什么在全局名称空间上声明变量使该变量成为此属性(全局名称空间=窗口)?

因为全局范围中的this是对变量居住的对象的引用。

为什么在创建新对象时,项目1上的行为不会发生在功能范围内?

因为函数范围中的this的行为与全局范围中的行为不同。

在具有 this绑定的函数中,其值由函数的呼叫者确定,并且可能是任何对象(甚至是严格模式下的原始对象)。

声明函数本地变量的确使其在该函数的范围内,但并不使其成为函数对象的属性。使用this关键字时,您将函数引用为object,因此可以将变量分配为该对象的属性。

this在全局范围中是对变量驻留的对象的引用。

全局名称空间=窗口。你自己说了

在具有this绑定的函数中,其值由函数的呼叫者设置

进一步阅读

https://developer.mozilla.org/en-us/docs/web/javascript/reference/reference/operators/this

相关内容

  • 没有找到相关文章