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

JavaScript中闭包是否适用于对象的方法?

JavaScript中闭包是否适用于对象的方法?

嘿,作为JS新手能琢磨到这个问题,说明你对作用域和闭包的理解已经入门啦!先给你拍板:闭包完全适用于对象的方法,你写的这段代码其实已经把这个道理讲得明明白白了~

咱来拆解下你的代码:

let name = "doe";

function foo() {
  let name = "jane";
  return {
    name: "john",
    sayName() {
      console.log(name);
    },
  };
}

foo().sayName(); // 输出 "jane"

你猜的没错:对象本身不会创建新的作用域。sayName方法是在foo函数的内部作用域里定义的,它的词法作用域就绑定在foo的作用域上,跟它后来被放到对象里当属性完全没关系。

当你调用foo().sayName()时,foo函数执行完已经退出了,但sayName方法因为闭包的存在,依然保留着对foo内部作用域的引用——所以它会优先找foo里的name(也就是"jane"),而不是全局的"doe",也不是对象自身的"john"。

再给你补个小总结:不管函数是作为普通函数、对象方法还是类方法存在,只要它是在某个作用域内定义的,并且能在这个作用域外部被调用,就会形成闭包,牢牢记住自己定义时的“环境”。对象只是个装函数的容器,根本不会改变函数的词法作用域哦~

备注:内容来源于stack exchange,提问作者kbl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 15:19:37