刚刚描述为标题。
我得到了如何解决情况的答案-this
指undefined
。
但没有答案告诉我为什么this
是指undefined
。
我认为,如果没有隐式或明确指定this
,则指定window/global-env
。
当然,在strict-mode
中,this
将为undefined
。
这是在运行时确定的,并取决于代码,可能是不同的。
这是
- 在运行时确定函数时
- 取决于如何调用函数,而不是函数在哪里定义
- 对对象的引用。
- 将永远是一个对象
- 全局(这(在严格模式下不可用
示例1: this = window
var name = 'Global';
var callName1 = function() {
var name = 'Peter';
console.log('--- From callName1 ----');
console.log(this.name);
//console.log(this);
callName2();
}
var callName2 = function() {
var name = 'Jane';
console.log('--- From callName2 ----');
console.log(this.name);
//console.log(this);
}
callName1();
var execute = function(fn) {
var name = 'Mary';
console.log('--- From execute ----');
console.log(this.name);
//console.log(this);
}
execute(callName2);
示例2:在严格模式下不可用
'use strict';
var name = 'Global';
var callName1 = function() {
var name = 'Peter';
console.log('--- From callName1 ----');
console.log(this.name);
console.log(this);
}
callName1();
示例3:使用方法调用
检查
var name = 'global';
var obj = {
name: 'James Obj1',
func: function() {
console.log('--- From func ----');
console.log(this.name);
console.log(this); // this reference obj1
}
}
obj.func()
var obj2 = {
name: 'Jame Obj2',
func: obj.func // this reference obj2, but the function is defined in obj1
}
obj2.func()
var obj3 = {
name: 'Kane Obj3',
obj4: {
name: 'Mary Obj4',
func: function () {
console.log('--- From obj4 ----');
console.log(this.name);
console.log(this); // this reference obj4
}
}
}
obj3.obj4.func()
使用 () => {}
函数 - 是词汇上的。这意味着它使用包含箭头函数的代码中使用this
。
使用下面的代码验证方法是否处于严格模式。
在方法中包括以下代码。
有一个类型错误,这意味着方法处于严格的模式,可以解决混乱。
var obj2 = { get x() { return 17; } };
obj2.x = 5;