You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript独立函数中this关键字的工作机制及代码异常咨询

为什么独立函数里的this.name输出undefined?
  • let/const声明的全局变量不会挂载到全局对象
    你用let name = "Steve"声明的变量属于全局作用域,但它不会成为全局对象(浏览器环境是window,Node.js环境是globalThis)的属性。而独立函数调用时,this确实指向全局对象,所以this.name找不到对应属性,自然返回undefined。

  • var声明的变量才会挂载到全局对象
    把代码里的let换成var就能得到预期结果:

    var name = "Steve";
      
    function sayHelloOne() {
      console.log(`Hello, I'm ${this.name}`);
    }
      
    sayHelloOne(); // 输出 "Hello, I'm Steve"
    

    这是因为var声明的全局变量会自动成为全局对象的属性,此时this.name就能读取到对应的值。

  • 直接访问变量而非this更合适
    既然用了let声明变量,其实不需要通过this访问——函数可以通过作用域链直接读取外层的name变量:

    let name = "Steve";
      
    function sayHelloOne() {
      console.log(`Hello, I'm ${name}`); // 直接用name,输出 "Hello, I'm Steve"
    }
      
    sayHelloOne();
    
  • 严格模式下的特殊情况
    如果在严格模式("use strict")下运行你的原代码,this会变成undefined,调用this.name甚至会直接抛出错误,而非返回undefined。

内容的提问来源于stack exchange,提问作者Still_Learning

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 02:55:39