1、//作用域的概念
//作用域:变量的生效范围,如果变量在整个页面中都可以访问到,则该变量就是一个全
局变量;如果变量的有效范围只是在某一个范围内,该变量就是一个局部变量。
//在函数内部,使用var定义的变量是局部变量,除此以外,都是全局变量。没用用var定义的变量,则是一个全局变量
// var a = 12;
// function useA () {
// 因为在内部作用域中使用到了和外部作用域同名的变量,所以需要先判断内部有没有重
新定义这个变量,(1):如果重新定义了,那么就是用新定义的这个变量,(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、 //匿名函数
//具名函数:有函数名,可以通过函数名来调用
//匿名函数:没有函数名,可以通过事件来调用,变量调用,自调用;
var a = function(){
alert("hello world")
};
(function (a){alert("goodbye world"+a)})("sdfds");
//给事件添加匿名函数
//匿名函数可以当做参数传递
setInterval(function(){
alert("fdsds")
},1000)
//匿名函数可以当做返回值
3、//闭包
//可以通过闭包在外部访问局部变量
//凡是放在返回函数中的变量会被提升为全局变量,驻留在内存中不释放
function f1(){
var n = 999;
nAdd = function(){n+=1};
function f2(){
alert(n)
}
return f2;
}
var result = f1();
nAdd();
result();
//使用闭包的思路解决循环添加事件的Bug
//定义一个属性存储每次循环的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)
}