JavaScript this 的值是什么?

2021-02-02  本文已影响0人  taichiyi

JavaScript this 的值是什么

可以根据以下流程图判断↓

what-this-value-javascript-flow

流程图中有①-⑦种结果,下面一一举例。

第①种结果:

console.log(this); // this的值为全局对象

第②种结果:

const foo = {
  name: 'taichiyi',
  age: 3,
  getName: function () {
    (() => {
      console.log(this); // this的值为foo对象
    })();
  },
}
foo.getName();

第③种结果:

function Foo() {
  console.log(this); // this的值为空对象,对象的原型为Foo构造函数的原型
}
new Foo();

第④种结果:

const fooObj = {
  name: 'taichiyi',
  age: 3
};
function foo() {
  console.log(this); // this的值为fooObj
}
foo.call(fooObj);
foo.apply(fooObj);

第⑤种结果:

const foo = {
  name: 'taichiyi',
  age: 3,
  getName: function () {
    console.log(this); // this的值为foo对象
  },
}
foo.getName();

第⑥种结果:

function foo() {
  'use strict';
  console.log(this); // this的值为undefined
}
foo();

第⑦种结果:

function foo() {
  console.log(this); // this的值为全局对象
}
foo();

例题(chrome V81.0)

例1:

<details open>
<summary>下面代码依次打印的值是什么?</summary>
<pre>
'use strict';
var age = 18;
const foo = {
name: 'taichiyi',
age: 3,
getName: function () {
setTimeout(() => {
console.log(this.age); // [A]
}, 100);
setTimeout(function b() {
console.log(this.age); // [B]
new.target;
}, 100);
},
}
foo.getName();
</pre>
<details>
<summary>点击查看答案:</summary>
<div>3</div>
<div>18</div>
<pre>
解析:

例2:

<details open>
<summary>下面代码依次打印的值是什么?</summary>
<pre>
var age = 18;
const foo = {
name: 'taichiyi',
age: 3,
getName: () => {
setTimeout(() => {
console.log(this.age); // [A]
}, 100);
setTimeout(function () {
console.log(this.age);
}, 100);
},
}
foo.getName();
</pre>
<details>
<summary>点击查看答案:</summary>
<div>18</div>
<div>18</div>
<pre>
解析:

例3:

<details open>
<summary>下面代码依次打印的值是什么?</summary>
<pre>
var age = 18;
const foo = {
name: 'taichiyi',
age: 3,
getName: function() {
console.log(this.age);
return () => {
console.log(this.age);
}
},
}
foo.getName()();
</pre>
<details>
<summary>点击查看答案:</summary>
<div>3</div>
<div>3</div>
</details>
</details>

例4:

<details open>
<summary>下面代码依次打印的值是什么?</summary>
<pre>
'use strict';
var age = 18;
const foo = {
name: 'taichiyi',
age: 3,
getName: function() {
return function() {
console.log(this);
}
},
}
foo.getName()();
</pre>
<details>
<summary>点击查看答案:</summary>
<div>undefined</div>
</details>
</details>

上一篇下一篇

猜你喜欢

热点阅读