JavaScript中this指向的四种情况具体是哪些?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1307个文字,预计阅读时间需要6分钟。
JavaScript中的this关键字常常让开发者感到困惑,因为它指向的上下文取决于函数或方法被调用的方式。下面通过一个简单的测试题来探讨这个问题。
测试题:
假设以下代码段:
javascriptfunction Person(name) { this.name=name; this.sayName=function() { console.log(this.name); };}
var person1=new Person(Alice);var person2=new Person(Bob);
person1.sayName(); // 输出:Aliceperson2.sayName(); // 输出:Bob
var sayName=person1.sayName;sayName(); // 输出:undefined
请问:`sayName()`函数为什么会输出`undefined`?
答案解析:
当`sayName`被赋值给变量`sayName`时,它变成了一个普通的函数,而不是一个方法。此时,`sayName`函数内部的`this`不再指向`person1`或`person2`,而是指向全局对象(在浏览器中通常是`window`)。由于`sayName`函数内部没有定义`name`变量,所以会输出`undefined`。
本文共计1307个文字,预计阅读时间需要6分钟。
JavaScript中的this关键字常常让开发者感到困惑,因为它指向的上下文取决于函数或方法被调用的方式。下面通过一个简单的测试题来探讨这个问题。
测试题:
假设以下代码段:
javascriptfunction Person(name) { this.name=name; this.sayName=function() { console.log(this.name); };}
var person1=new Person(Alice);var person2=new Person(Bob);
person1.sayName(); // 输出:Aliceperson2.sayName(); // 输出:Bob
var sayName=person1.sayName;sayName(); // 输出:undefined
请问:`sayName()`函数为什么会输出`undefined`?
答案解析:
当`sayName`被赋值给变量`sayName`时,它变成了一个普通的函数,而不是一个方法。此时,`sayName`函数内部的`this`不再指向`person1`或`person2`,而是指向全局对象(在浏览器中通常是`window`)。由于`sayName`函数内部没有定义`name`变量,所以会输出`undefined`。

