JavaScript执行(二):闭包和执行上下文到底是怎么回事?
该思维导图由 AI 生成,仅供参考
闭包
- 深入了解
- 翻译
- 解释
- 总结
JavaScript执行(二):闭包和执行上下文到底是怎么回事?本文深入探讨了JavaScript函数执行过程中的闭包和执行上下文的概念。闭包作为一个带有执行环境的函数,在JavaScript中具有重要意义,其环境部分由函数的词法环境、标识符列表和表达式部分组成。执行上下文则包含词法环境、变量环境、this值、代码执行状态、函数、脚本或模块、基础库和内置对象实例等多个部分。通过分析代码示例,文章展示了执行上下文提供的信息,以及不同位置和执行情境下相同代码产生不同行为的情况。整体而言,本文通过深入浅出的方式,帮助读者理解了JavaScript函数执行过程中闭包和执行上下文的重要性和作用。 文章还介绍了var声明与赋值的技巧,包括立即执行的函数表达式(IIFE)的使用,以及使用void关键字的写法。此外,对ES6中let的引入和块级作用域的概念进行了讨论,以及最新标准中引入的Realm概念。通过代码示例展示了不同Realm中对象操作的差异。最后,留给读者一个问题:喜欢使用let还是var?并鼓励读者思考并分享自己的想法。 整体而言,本文内容丰富,涵盖了JavaScript函数执行过程中的重要概念和技术特点,适合读者快速了解和深入学习。
《重学前端》,新⼈⾸单¥59
全部留言(114)
- 最新
- 精选
- 麦哲伦老师能解释下这个么? var b = 10; (function b(){ b = 20; console.log(b); // [Function: b] })();
作者回复: 这个地方比较特殊,"具有名称的函数表达式"会在外层词法环境和它自己执行产生的词法环境之间产生一个词法环境,再把自己的名称和值当作变量塞进去,所以你这里的b = 20 并没有改变外面的b,而是试图改变一个只读的变量b。 这块知识有点偏,随便看看就好。
2019-02-271232 - Geek_f51da4老师,闭包我是这样理解的,函数里边的函数,这样的理解对吗
作者回复: 完全错了
2019-06-1297 - 张祥儒winter大大,我觉得应该用global object,和active object 来解释这个闭包,作用域,执行器上下文。
作者回复: 这是ES3里的解释法,现在已经解释不了很多语法了。
2019-02-2627 - beilunyang闭包其实是一个绑定了执行环境的函数。 var foo = 'foo'; function printFoo() { console.log(foo); } printFoo(); 所以printFoo这个函数是一个闭包,对吗
作者回复: 对,其实JS里任何函数都是闭包......
2019-10-214 - 海绵薇薇老师您好,对于 --- JavaScript 中跟闭包对应的概念就是“函数” 这句话我还是理解不够。 说是闭包和执行上下文没关系,但是词法作用域,不就和执行上下文相关吗?用到的标识符在作用域链上,作用域链不是在执行上下文里吗?
作者回复: 执行上下文是词法作用域的一种实现方式,但不是唯一的实现方式,你要彻底搞清楚这些概念的意思,不要混在一起理解。
2019-09-161 - 陈斌我查看另一篇博客资料: 执行上下文同时包含变量环境组件(VariableEnvironment)和词法环境组件(LexicalEnvironment),这两个组件多数情况下都指向相同的词法环境(Lexical Environment)。 一般情况下一个执行上下文内的Variable Environment和Lexical Environment指向同一个词法环境,之所以要区分两个组件,主要是为了实现块级作用域的同时不影响var声明及函数声明。 和老师您如下介绍的是否有点冲突? lexical environment:词法环境,当获取变量或者 this 值时使用。 variable environment:变量环境,当声明变量时使用。 我觉得我看了上面的博客之后,理解不了您的意思了?
作者回复: 这个概念在标准中有过版本变化,所以以最新标准为准。
2019-08-301 - J小白有点懵逼,老师可以解答下几个问题吗 > var 把 b 声明到哪里; b 表示哪个变量; b 的原型是哪个对象; let 把 c 声明到哪里; this 指向哪个对象。 > var b = {} 这样一句对两个域产生了作用 ? 两个域是指哪两个 > 分析了一些执行上下文中所需要的信息,并从var、let、对象字面量等语法中,推导出了词法作用域、变量作用域、Realm的设计。 ? 执行上下文需要的信息是哪些 ? 在哪里推导了,两个作用域在哪里
作者回复: 这不就是课程讲的内容么
2019-10-30 - 泡泡老师,已经读了十几篇了,感觉知识讲的太深,专业词汇较多,读起来比较生涩
编辑回复: 你具体在哪里不懂呢,可以留言呀。
2019-03-20 - 追梦请问老师,这个例子,是如何得出“可以看到,在 Global function with 三个环境中,b 的值都不一样”这个结论的? var b; void function(){ var env = {b:1}; b = 1; console.log("In function b:", b); with(env) { var b = 1; console.log("In with b:", b); } }(); console.log("Global b:", b);
作者回复: 这里写错了一个地方,我改一下
2019-02-28 - Geek_56013e老师您的专业知识太强了,文中包含很多专业术语,在介绍某专业术语时带上了其他专业术语,而这些带上的专业术语部分在网上搜也是解释不清,导致很多地方看不懂、看起来比较费劲、只能猜测大意。比如对于「realm」的描述,只提了中文意思是“国度”“领域”“范围”和“包含一组完整的内置对象,而且是复制关系”,看完文章后,在js领域还是不清楚具体「realm」是什么含义,只能大概猜测。希望老师后续文章如果解释某专业术语时带上的其他专业术语时,能以日常常见代码为例解释。2019-02-273299