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
相关产品推荐
相关产品推荐

