理解作用域链

本文通过一个具体的JavaScript代码示例,详细解释了闭包的工作原理和作用域链的概念。此外,还介绍了深拷贝与浅拷贝的区别及其应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

理解作用域链

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

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))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值