作用域、匿名函數(shù)、閉包

1、//作用域的概念

//作用域:變量的生效范圍,如果變量在整個(gè)頁(yè)面中都可以訪問到,則該變量就是一個(gè)全
局變量;如果變量的有效范圍只是在某一個(gè)范圍內(nèi),該變量就是一個(gè)局部變量。

//在函數(shù)內(nèi)部,使用var定義的變量是局部變量,除此以外,都是全局變量。沒用用var定義的變量,則是一個(gè)全局變量


            

    
//      var a = 12;
//      function useA () {
// 因?yàn)樵趦?nèi)部作用域中使用到了和外部作用域同名的變量,所以需要先判斷內(nèi)部有沒有重
新定義這個(gè)變量,(1):如果重新定義了,那么就是用新定義的這個(gè)變量,(2):如 果沒有,則該變量就是外部作用域中的變量

//          alert(a); // undefine
//          var a = 24;
//          
//          return a;
//      }
//      
//      alert(a); // 12
//      alert( useA() );  // 24
//      
//      alert(a);  // 12



function demoFun () {
alert(e);
}




demoFun();

  var e = 23;


function demoFun1 () {
alert(e);
}

demoFun1();

2、 //匿名函數(shù)

//具名函數(shù):有函數(shù)名,可以通過函數(shù)名來調(diào)用
//匿名函數(shù):沒有函數(shù)名,可以通過事件來調(diào)用,變量調(diào)用,自調(diào)用;
var a = function(){
alert("hello world")
};

(function (a){alert("goodbye world"+a)})("sdfds");

//給事件添加匿名函數(shù)
//匿名函數(shù)可以當(dāng)做參數(shù)傳遞
setInterval(function(){
alert("fdsds")
},1000)

//匿名函數(shù)可以當(dāng)做返回值

3、//閉包

//可以通過閉包在外部訪問局部變量
//凡是放在返回函數(shù)中的變量會(huì)被提升為全局變量,駐留在內(nèi)存中不釋放
function f1(){
var n = 999;
nAdd = function(){n+=1};
function f2(){
    alert(n)
}
return f2;
}

var result = f1();
nAdd();
result();




//使用閉包的思路解決循環(huán)添加事件的Bug
//定義一個(gè)屬性存儲(chǔ)每次循環(huán)的i的值
/*for(var i=1;i<4;i++){
var btn = document.getElementById("button"+i)
btn.tempNumber = i
btn.onclick=function(){
    alert("button"+this.tempNumber)
}
}*/

4、//用閉包解決

for(var i=1;i<4;i++){
var btn = document.getElementById("button"+i);
//alert(btn)
(function(num){
    btn.onclick=function(){
        alert("button"+num)
    }
})(i)
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容