用变量的方式定义函数
<script type="text/javascript">
/*
原来的写法:可以提前
myAlert();
function myAlert(){
alert('hello!');
}*/
//函数用变量方式定义:先定义再使用
// myalert();//提前会报错
var myAlert = function(){
alert('hello!');
}
myAlert();//放在下面可以执行
</script>
......................................................................................................................................................................
闭包
闭包的本质就是函数嵌套,就是在函数里面定义函数,
内部函数可以引用外部函数的参数和变量
参数和变量不会被垃圾回收机制给回收
闭包的用途:可以存循环的索引值、做私有变量计数器
......................................................................................................................................................................
闭包存循环的索引值
<style type="text/css">
li{
height: 30px;
background-color: gold;
margin-bottom: 10px;
}
</style>
<script type="text/javascript">
//闭包的用途:存循环的索引值
window.onload = function(){
var aLi = document.getElementsByTagName('li');
// alert(aLi.length);//8
for(var i=0; i<aLi.length; i++){
/*
aLi[i].onclick = function(){
alert(i);//每个li都弹出8,因为点击时循环已完毕,i最后为8
}
*/
(function(k){//这里的k是形参
aLi[k].onclick = function(){
alert(k);//弹出每个li的索引值
}
})(i);//这里的i是实参
}
}
</script>
......................................................................................................................................................................
闭包做私有变量计数器
<script type="text/javascript">
//闭包的用途:私有变量计数器
var count = (function(){
var a = 0;
function bb(){
a++;
return a;
}
return bb;
})();
//每调用一次count,a就自增一次
alert(count());//1
alert(count());//2
var c = count();
alert(c);//3
</script>
......................................................................................................................................................................