------------------《封閉作用域》------------------
簡介:封閉作用域又稱之為封閉空間,還有一個昵稱叫小閉包,以及匿名函數自調。
基本結構: (function(){}) ?();
(function(){})(); ?技法最大目的:全局變量私有化。
技術優點: 不污染全局空間! ?內部所有的臨時變量執行完畢都會釋放不占內存。
可以保存全局數據。 ? 更新復雜變量。---ajax中的str那里可以用個閉包拿進來。
例如:(function(document){
document.write('你好');
})(document); //閉包保存全局數據
---------------《作用域鏈》
嵌套之間的函數會形成作用域鏈,每次對變量的訪問實際上都是對整條作用域鏈的遍歷查找。
先查找最近的作用域,最后再查找全局作用域。如果在某個作用域找到了對量就會結束本次查找過程。
例如:// var a=1;
// (function(){
// var a=2;
// (function(){
// var a=3;
// alert(a);}))
重點注意:
對于作用域全局作用域查找快,還是局部作用域查找快? 局部作用域查找要遠遠大于全局作用域查找的速度。
所以高級的程序設計一般是盡量避免全局查找。
保存上一次的目標*
方法:當前目標使用完以后再退出作用域之前儲存這個目標就可以在下次取到上一次的目標。也就是設置一個全局變量來保存
-----保存作用域
var A=function(){
var a=1;
var b=2;
return function(){
alert(b++);//保留值得作用,b隱式變成一個全局變量
}
}
var B = A();
B();
B();
B();
------《保存作用域》---簡介:保存作用域是一種更高級的閉包技術,如果函數嵌套函數內部的那個函數將形成作用域閉包。
簡單的說,這種閉包能夠達到的好處就是讓指令能夠綁定一些全局數據去運行;
基本結構:
var A=function(){
Var num = 0;//這個num會變成全局變量。
return function(){}; //返回的是一個函數。
}
技術的好處:
全局數據隱藏化。
可以讓某個指令運行時候綁定一些隱藏的全局數據在身上。
一句話總結:
將數據綁定在指令上運行。讓指令不再依賴全局數據。
onresize 事件會在窗口或框架被調整大小時發生。
思想:就是讓其后執行。。。。(運用了閉包)
--函數截流1--主要給個定時器
function throttle(fn,delay){
var timer=null;//為了不污染全局變量
return function(){
clearTimeout(timer)
timer=setTimeout(fn,delay)
}
}
window.onresize=throttle(function(){
document.body.innerHTML=document.documentElement.clientWidth;
},200)
--函數截流2
function throttle(fn,delay){
var timer=null;
return function(){
clearTimeout(timer)
timer=setTimeout(fn,delay)
}
}
window.onscroll=throttle(function(){
document.body.children[0].innerHTML=document.body.scrollTop;
},200)