250410-this的指向问题
执行以下程序,输出结果为()
function a(){
console.log(this);
}
a.call(null);
A. document
B. nul1
C. window
D. a
E. undefined
答案
C
题源
链接:https://www.nowcoder.com/questionTerminal/d43e741e2f4b456aa7a489a45f0a738e?
来源:牛客网
[!note]
这道题目考察了JavaScript中函数调用时this指向的问题,特别是使用call方法时的特殊情况。
当使用call方法调用函数时,第一个参数会指定函数执行时的this值。但是,如果传入的是null或undefined,在非严格模式下,this会自动指向全局对象window(浏览器环境)。这是JavaScript语言的一个特殊设定。
所以a.call(null)执行时:
- 由于传入的是null
- 代码运行在非严格模式下
- this会被自动替换为全局对象window
因此C选项window是正确答案。
分析其他选项:
A选项document错误:document是window对象下的一个属性,表示当前文档,不会作为this值
B选项null错误:虽然调用时传入的是null,但非严格模式下会被替换为window
D选项a错误:这里的a是函数名,不会作为this值
E选项undefined错误:类似null,undefined传入时在非严格模式下也会被替换为window
补充:如果在严格模式下('use strict'),this将保持为null,而不会被替换为window。但本题是在非严格模式下的情况。
错因
[!note]
严格模式:
'use strict';
function a() {
console.log(this);
}
a.call(null); // 在严格模式下,this会是null
非严格模式:
function a() {
console.log(this);
}
a.call(null); // 在严格模式下,this会是null