发表于: 2017-05-24 22:27:27
2 921
今天做了的事:
完成了初步的代码合♂体,感觉很不错,没有大面积的崩溃,出现的小问题就好解决了。
昨天的遮罩问题初步是怀疑是不是把弹窗设置在这着里面了,明天排查后如果未能解决就按照师兄的建议引用bs。
明天要做的事:
如果没有再出图,就Yoooooo~
截止到现在又出了8个图。。。
今天学到了什么
主要是思言的小课堂,学习了一波简单的作用域链和闭包:
1.作用域链:
作用域链,是由当前环境与上层环境的一系列变量对象组成,它保证了当前执行环境对符合访问权限的变量和函数的有序访问。
var a = 20;
function test() {
var b = a + 10;
function innerTest() {
var c = 10;
return b + c;
}
return innerTest();
}
test();
在上面的例子中,全局,函数test,函数innerTest的执行上下文先后创建。我们设定他们的变量对象分别为VO(global),VO(test), VO(innerTest)。而innerTest的作用域链,则同时包含了这三个变量对象,所以innerTest的执行上下文可如下表示。
innerTestEC = {
VO: {…}, // 变量对象
scopeChain: [VO(innerTest), VO(test), VO(global)], // 作用域链
this: {}
}
2.闭包
当函数可以记住并访问所在的作用域(全局作用域除外)时,就产生了闭包,即使函数是在当前作用域之外执行。
简单来说,假设函数A在函数B的内部进行定义了,并且当函数A在执行时,访问了函数B内部的变量对象,那么B就是一个闭包。
avaScript拥有自动的垃圾回收机制,关于垃圾回收机制,有一个重要的行为,那就是,当一个值,在内存中失去引用时,垃圾回收机制会根据特殊的算法找到它,并将其回收,释放内存。
而我们知道,函数的执行上下文,在执行完毕之后,生命周期结束,那么该函数的执行上下文就会失去引用。其占用的内存空间很快就会被垃圾回收器释放。可是闭包的存在,会阻止这一过程。
所以,通过闭包,我们可以在其他的执行上下文中,访问到函数的内部变量。
感悟:
不要这种井喷式出图啊!一天旱死,一天涝死!
评论