日期:2014-05-16 浏览次数:20502 次
前言:
?
本来按照自己的计划是推出的是
?
?
?? ? ? ?无论从性能角度去分析还是一般从我们代码的设计去实现某些功能的角度去分析或者说一些方法安全角度去考虑这个“作用域”的问题,多是很有意义的。因为里面涉及到比如变量可以被谁去访问或者this的时候咋去赋值。
?
?? ? ? 作用域链----在代码执行环境中会创建由变量对象构成的。
?
function test(val1.val2){
var total = val1 + val2; //一般我们不建议将随便两个任意类型的变量做和
return total;
}
//这样test()作用域链包含两个对象
//1个是自身的包含arguments的变量对象
//1个是全局环境下的变量对象如navigator/document
?test在执行的时候会创建一个“运行期上下文”的内部对象。多次调用同一个函数会导致创建多个运行期上下文。但是函数执行完毕后它会被销毁。
?
请注意:1.当函数执行的时候,解析到变量的时候,多会需要一次标识符的解析,看看它在哪来获取或存储数据的。
?? ? ? ? ? ? 2.解析标识符的过程其实是在运行期上下文的作用链中进行的,找到即停止,没有找到继续作用域链的下一个对 ? ? ? ? ? ? ? ? ? 象。
?
所以机会提出下列编码优化
?
?
function init(){
var target = document.body,
news= document.getElmentById("news"),
spinbar = document.getElmentById("spins");
...........
}
//因为document是全局对象
//优化的重点是将全局对象赋值给局部变量
//下面多是引用
/*var doc = document,
target = doc.body,
news = doc.getElementById("news")
.........
*/
//核心还是对于全局对象最好在函数内部定义局部变量赋值引用
其实如果你研究过jquery源码你会发现在函数内部的局部变量包含document = window.document userAgent =navigator.userAgent toString =Object.prototype.toString 还有就是很多人已经发现的jQuery在闭包的参数就是window