Js忍者秘籍-闭包和作用域

1.闭包

1.1闭包的概念

闭包是函数创建时所处的作用域中的函数和变量,通过闭包可以访问创建闭包时环境中的全部变量

1.2闭包的功能

闭包可以实现以下功能:通过构造函数的内部变量及构造方法模拟对象的私有属性。处理回调函数,简化代码。

2.词法环境(作用域)

2.1变量

在JS中可以定义全局、函数和块级别的变量
const和let与var的区别:可变性和与词法环境的关系

2.1.1 可变性

  • const
    用于不需要重新赋值的变量或者固定变量,不能赋值,但是可以修改属性(对象)或者增加长度(数组)
  • let和var
    均可自由改变变量值

2.1.2 与词法环境的关系

  • var
    在距离最近的函数或是在全局词法环境中定义
  • let和const
    在距离最近的词法环境中定义(可能在块级作用域、循环、函数或全局环境内)

3.词法环境中注册标识符

JS并不是逐行执行的,而是分两个阶段:

  • 创建了新的词法环境
  • 执行第一阶段
    注册当前词法环境的变量和函数
  • 第二阶段
    接连判断:
    ①是否是函数环境(是的话创建形参和arguments,不是跳过)
    ②是否是全局或函数环境(是的话注册函数声明(不包括箭头和函数表达式),不是的话(块级作用域)跳过)
    ③是否是块级作用域(是的话注册当前块的let和const,不是的话找到当前函数var变量和块外的let和const)

PS:这样两个阶段的好处是可以在声明之前调用,但是不适用于表达式和箭头函数,因为他们是在执行过程中定义的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值