理解作用域链

理解作用域链

我们先看一下闭包是如何工作的

var currentScope = 0; 
(function () {
  var currentScope = 1, one = 'scope1';
  alert(currentScope);
  (function () {
    var currentScope = 2, two = 'scope2';
    alert(currentScope);
    (function () {
      var currentScope = 3, three = 'scope3';
      alert(currentScope);
      alert(one + two + three); 
    }());
  }());
}());
  • 上面的嵌套函数时会形成闭包,当父函数立即执行后,内部函数也可以引用其外部封闭函数中存在的变量
  • JavaScript通过遍历的方式来查找变量
  • 在第三个函数中,第二个、第一个、和全局的声明的currentScope的变量被隐藏,其值保持不变,第三个又声明了currentScope当访问该范围的是此currentScope作为此立即执行函数表达式的作用域链中的第一个
  • 函数在执行的过程中,先从自己内部内部找变量
  • 如果找不到,再从创建当前函数所在的作用域去找,以此往上
  • 注意找的是变量当前的状态
  • 深拷贝和浅拷贝(首相明白基本类型,像number,string、Boolean。复杂类型array、object)
  • 浅拷贝拷贝和被拷贝对象的指针指向相同的地址,修改其中的任意一个值另一个值都会随之变化,这就是浅拷贝
  • 深拷贝(完全复制了一份)当拷贝对象放到了新的内存中有了新的地址,和被拷贝对象的不同,修改任意值另一个不会发生改变
var newObj=JSON.parse(JSON.stringify(oldObject))

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值