Javascript 作用域链和闭包 :代码中出现相同的变量,JavaScript引擎是如何选择的?

1.应用场景

用于了解作用域链和闭包, 以及他们的用法, 在开发中常见的用法,同时对比不同语言实现闭包的方式和本质。

2.学习/操作

1.文档阅读

10 | 作用域链和闭包 :代码中出现相同的变量,JavaScript引擎是如何选择的?-极客时间

函数 - JavaScript 教程 - 网道

Javascript - this到底是什么, 应该怎么用?_穿素白衫的中少年的博客-CSDN博客  

2. 整理输出

2.1 介绍

在 JavaScript 中,根据词法作用域的规则,内部函数总是可以访问其外部函数中声明的变量,当通过调用一个外部函数返回一个内部函数后,即使该外部函数已经执行结束了,但是内部函数引用外部函数的变量依然保存在内存中,我们就把这些变量的集合称为闭包

比如,外部函数是 foo,那么这些变量的集合就称为 foo 函数的闭包

例子:


function foo() {
    var myName = "极客时间"
    let test1 = 1
    const test2 = 2


    var innerBar = {
        getName:function(){
            console.log(test1)
            return myName
        },
        setName:function(newName){
            myName = newName
        }
    }


    return innerBar
}


var bar = foo()
bar.setName("极客邦")
var name = bar.getName()
console.log(name)

输出结果:

1

极客邦

Key Point:this系统和作用域链是两套不一样的系统。

文章截图如下:「暂时如此

10 | 作用域链和闭包 :代码中出现相同的变量,JavaScript引擎是如何选择的?-极客时间

2.2 实践

闭包 - JavaScript | MDN -- 推荐阅读 & 实践

性能考量

如果不是某些特定任务需要使用闭包,在其它函数中创建函数是不明智的,因为闭包在处理速度和内存消耗方面对脚本性能具有负面影响。

3.问题/补充

TBD

4.参考

参见文档阅读列表

后续补充

...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值