//作用域:變量的生效范圍,如果變量在整個(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)
}
}*/