【Web基础】JAVAScript基础之闭包详解

最近遇到的一些坑,都是因为自己基础掌握的不够扎实,因此想抽时间做一个专题,把一些核心的语法深入的理解一下。

一.闭包概念

闭包是指一个函数或函数的引用,与一个引用环境绑定在一起,这个引用环境是一个存储该函数每个非局部变量的表。
闭包不同于一般函数,它允许一个函数在立即词法作用域外调用时,仍可访问非本地变量。

二.作用域

1.全局作用域
2.函数作用域
3.eval作用域

注:1.JS中是没有块级作用域的。
2.作用域从内到外均可以访问到。

把变量放到匿名函数,变成局部变量,避免大量的全局变量造成冲突。

(function(){
  var a,b;
  })();
function(){
  var a,b;
  }();

!的作用:把函数变成函数表达式而不是函数的声明。若变成函数的声明,就会被前置处理掉,最后留下了括号或者没有写名字都会报语法错误。

作用域链:创建的作用域中对象的集合。

作用域中的每个对象被称为可变对象,以键值对的形式存在。

三. ES3执行上下文

1.执行上下文
2.变量对象:是一个抽象概念中的对象,它用于存储执行上下文中的变量声明,函数声明,函数参数。

全局环境下也有一个变量对象:
VO===this===global

3.激活对象(AO):函数调用的时候,会有一个特定的arguments对象。

4.VO填充顺序:

(1)函数参数(若未传入,初始化该参数为undefined)
(2) 函数声明(若发生命名冲突,会覆盖)
(3)变量声明(初始化变量值为undefined,若发生命名冲突,会忽略)

5.执行过程
函数创建时->作用域链中插入一个对象变量(全局变量)
函数执行时->创建一个执行环境内部对象,每次执行函数都创建一个新的执行对象。

每个执行环境都有对应的作用域链,用于解析标识符。

创建执行对象时,首先填充[[scope]]作用域(活动对象),并被置入前端,当执行环境被销毁,活动对象也随之销毁。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值