[JS]闭包和词法环境
2021/7/27 6:06:24
本文主要是介绍[JS]闭包和词法环境,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
词法环境
词法环境(lexical environment)由两个部分组成:
- 环境记录——一个存储所有局部变量作为其属性的对象。
- 对外部词法环境的引用,与外部代码相关联。
全局词法环境在脚本执行前创建,它没有更外层的词法环境。
// 全局词法环境 let a = 'hello' // => hello let b // => undefined b = 'world' // => world
a
和b
作为环境记录这一对象的属性,它们被声明时就被赋予值或在之后的过程中被赋予值。
let who = '小明' function say(content) { let date = new Date() alert(`${who}说:${content} | at ${date}`) } say('你好,世界!')
say()
函数能够构成一个词法环境,因为函数引用了外部词法环境(也就是环境记录的属性who)。say()
函数访问外部词法环境时,首先会搜索内部词法环境,然后搜索外部词法环境,然后搜索更外部的词法环境,以此类推,直到全局词法环境。
闭包
一个函数和其词法环境的组合就是闭包。也就是说,闭包让你可以在一个内层函数中访问到其外层函数的作用域。ps:该定义被简化,原话在闭包 - JavaScript | MDN。
function count() { let record = 0 return function f() { return record++ } } let counter = count()
f()
函数和其词法环境是一个闭包,或者将视野往上看,count()
函数的作用域下就是一个闭包,内层函数f()
在闭包的作用下,可以访问外层函数的作用域内的任何局部变量。
在《JavaScript权威指南》中指出“所有JavaScript函数都是闭包”。
这篇关于[JS]闭包和词法环境的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-30React Native常用组件-点击组件
- 2024-05-30uniapp+vue3+uv-ui手机端后台OA管理模板
- 2024-05-29Python网络爬虫的时候json=就是让你少写个json.dumps()
- 2024-05-27React Native常用组件-展示组件
- 2024-05-27React Native常用组件-列表组件
- 2024-05-09vue3开发前端表单缓存自定义指令,移动端h5必备插件
- 2024-05-09React Hooks在class组件中的使用方式
- 2024-03-30[OIDC in Action] 2. 基于OIDC(OpenID Connect)的SSO(纯JS客户端)
- 2024-03-29terraform jsonencode
- 2024-03-13vuex-persist