坤海
2022-10-15
来自北京
老师,全局变量会存到闭包里吗?为什么在闭包里用全局变量会影响性能呢?
作者回复: 全局变量是可以在闭包里引用的。闭包里引用全局变量会影响性能是因为全局变量在函数执行销毁后,不会随着函数销毁,还会存在。
2
Nuvole Bianche
2023-03-25
来自上海
这一讲和我之前看的极客时间中李兵老师的专栏《浏览器工作原理》冲突点有点大。在李老师的专栏,他说的是:函数体中的代码在解析阶段并不会解析编译,而是在函数调用时会对函数体中的代码进行解析编译,创建函数执行上下文,作用域和可执行代码,并压入到调用栈栈顶,而本讲中的流程图和原文讲 :”根据流程图中的红色虚线框部分所示,在词法分析后,JavaScript 引擎会在做语法分析的同时,更新全局作用域和创建局部作用域。“ 本文后面从时间角度看,给我的认知也是一样的:函数体中的执行上下文,变量环境,词法环境等在一开始就解析全局作用代码时就准备好了,只是在执行阶段再入栈而出栈而已。 希望专栏老师解答一下。
2
奇得隆冬强
2023-03-15
来自上海
闭包 在 JavaScript 中,根据词法作用域的规则,内部函数总是可以访问其外部函数中声明的变量,当通过调用一个外部函数返回一个内部函数后,即使该外部函数已经执行结束了,但是内部函数引用外部函数的变量依然保存在内存中,我们就把【这些变量的集合称为闭包】。 比如外部函数是 foo,那么这些变量的集合就称为 foo 函数的闭包。
奇得隆冬强
2023-03-15
来自上海
老师问个问题: 函数是对象,所以它肯定在堆上了。 那你说的那个函数执行完销毁,是指的什么,是整个对象的销毁??
共 1 条评论
奇得隆冬强
2023-03-15
来自上海
function createCounter(){ let i=0; function increment(){ i++; } function getValue(){ return i; } return {increment,getValue} } const counter = createCounter(); 这里为啥要用 let 呢?? 我试了下不用 let 也是对的。
穷精致
2023-02-03
来自北京
所以应该怎么理解闭包呢?
共 1 条评论
kingsley
2022-11-24
来自浙江
这一节理解难度++
共 1 条评论
卡卡
2022-10-13
来自江苏
在函数式编程中,可以用闭包实现partial application