JavaSript中變量的作用域閉包的深入理解
更新時(shí)間:2014年05月12日 10:36:02 作者:
js中的變量都是公用的沒(méi)有靜態(tài)變量,下面為大家介紹下變量的作用域閉包,需要的朋友可以參考下
復(fù)制代碼 代碼如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
/*
* 1.js中的變量都是公用的.
2.js中沒(méi)有靜態(tài)變量
3.閉包:函數(shù)內(nèi)部可以調(diào)用函數(shù)外部的變量;反之,則不行
*/
var r=10;
function test1(){
var r2="abc";
//alert(r)
}
//alert(r2);//不能訪問(wèn)的函數(shù)內(nèi)部的r2
test1();
//嵌套的函數(shù)中也ok啦
function test2(num1){
function test3(num2,num3){
return num2+num3+num1;
}
return test3(10,20)
}
//alert(test2(30));
//---------循環(huán)中的閉包------------------------
function testfun(){
var r=1;
var arr=[];
for(var x=0;x<3;x++){
r++;
arr[x]=function(){
return r;
}
}
return arr;
}
alert("testfun:"+testfun());
var arr2=testfun();
alert("arr:"+arr2[0]);
alert("arr:"+arr2[1]());
alert("arr:"+arr2[2]());
//==========以上三個(gè)彈出框的結(jié)果都是4==========
/*分析原因:
理解一下在JavaScript中函數(shù)是什么?
函數(shù)就是一段可執(zhí)行的代碼塊,函數(shù)也是可以用一個(gè)變量表示,比如函數(shù)的第二種定義方式
var add=new Function("a","return a+10");底層的本質(zhì)就是這個(gè)函數(shù)名指向
了這一段為變量而創(chuàng)建的可執(zhí)行的代碼。
* 首先當(dāng)testfun函數(shù)執(zhí)行完畢以后,arr[0],arr[1],arr[]中都是存儲(chǔ)了相同的
可執(zhí)行代碼塊function(){
return r
}也就是說(shuō)上面三個(gè)是函數(shù)變量而已,要執(zhí)行它們只需要在變量名稱后面加()就ok了
而且這個(gè)時(shí)候r的值4
當(dāng)執(zhí)行arr[0]()相當(dāng)于執(zhí)行了這個(gè)代碼塊中的代碼。
所以最終的結(jié)果return r,當(dāng)然返回4了。
*/
</script>
</head>
<body>
</body>
</html>
相關(guān)文章
javascript 面向?qū)ο骹unction詳解及實(shí)例代碼
這篇文章主要介紹了javascript 面向?qū)ο骹unction詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-02-02微信小程序之滑動(dòng)頁(yè)面隱藏和顯示組件功能的實(shí)現(xiàn)代碼
這篇文章主要介紹了微信小程序之滑動(dòng)頁(yè)面隱藏和顯示組件功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06WEB 前端開(kāi)發(fā)中防治重復(fù)提交的實(shí)現(xiàn)方法
這篇文章主要介紹了JS WEB 前端開(kāi)發(fā)中防治重復(fù)提交的實(shí)現(xiàn)方法,涉及到表單提交的幾種方式介紹,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下2016-10-10JavaScript中document.querySelector函數(shù)用法介紹
這篇文章主要給大家介紹了關(guān)于JavaScript中document.querySelector函數(shù)用法的相關(guān)資料,document.querySelector是JavaScript中的一個(gè)內(nèi)置方法,用于通過(guò)CSS選擇器選擇文檔中的第一個(gè)匹配元素,需要的朋友可以參考下2023-08-08JavaScript數(shù)組Array的一些常用方法總結(jié)
JavaScript的Array對(duì)象是用于構(gòu)造數(shù)組的全局對(duì)象,數(shù)組是類似于列表的高階對(duì)象,下面這篇文章主要給大家介紹了關(guān)于JavaScript數(shù)組Array的一些常用方法,需要的朋友可以參考下2021-11-11微信小程序開(kāi)發(fā)實(shí)現(xiàn)輪播圖
這篇文章主要為大家詳細(xì)介紹了微信小程序開(kāi)發(fā)實(shí)現(xiàn)輪播圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06JavaScript中的偽數(shù)組用法及說(shuō)明
這篇文章主要介紹了JavaScript中的偽數(shù)組用法及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02