javascript - 为什么说JS的函数都可以称为闭包
天蓬老师
天蓬老师 2017-04-11 13:29:36
[JavaScript讨论组]

请教高手,广义而言,所有JS的函数都可以称为闭包,因为JS函数在创建时保存了当前的词法环境这句话怎么理解。

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(7)
PHP中文网

js的执行环境本身就是一个scope(浏览器的window/node的global),我们通常称之为全局作用域。每个函数,不论多深,都可以认为是全局scope的子作用域,可以理解为闭包。

ringa_lee

因为全局函数关联全局域(global scope),局部函数关联某个局部域(local scope),它们的形式是统一的。

另外,域和域有前后顺序但不直接关联,只有函数关联到创建位置的域([[scope]]),以及域关联到创建时被调用的函数(argument.callee)。这个链实际上就是调用链,它的终点就是全局域,解释器就在这个链上寻找变量。

另外全局域也是相对的,并不是像编译成二进制之后那样是固定的一块地方,在解释器的层面上,或者作为模块被别的代码调用的时候,全局域不过是另一种局部域而已。

大家讲道理

因为Javascript的作用域链的原因,参考Scope,函数内的变量的作用域会延伸到在该函数内定义的函数里,这样,子函数就符合了闭包的定义,所以每个函数都是闭包。

黄舟

看看阮大神写的这篇文章学习Javascript闭包(Closure)

天蓬老师

小结一下,因为任何JS函数都可以通过链式作用域访问到外部环境的变量,同时任何函数都不可能超出全局环境,所以可视为每个函数都保存了外部的环境,这符合了闭包的概念。

PHPz

闭包不闭包的 不就是起个名字吓吓人吗 跟所谓AOP一样 有啥意义

阿神

哈哈,记得之前有个人问了一个闭包的问题,我就说了一句所有函数都是闭包,然后就被各种踩,最后直接把我的回答给删了,真是服了,宝宝心里苦呀。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号