理解作用域链
我们先看一下闭包是如何工作的
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))