匿名函数与闭包(珠峰版)

作者:zccst

1,递归

2,闭包

function createComparisonFunction(propertyName){
return function(object1, object2){
var value1 = object1[propertyName];
var value2 = object2[propertyName];

if(value1 < value2){
return -1;
}else if(value1 > value2){
return 1;
}else{
return 0;
}
}
}

var compare = createComparisonFunction("name");
console.log(compare); //function
var result = compare({name:"Aicholas"},{name:"Breg"});
console.log(result); // -1


3,变量作用域。
js的作用域离开for循环后,变量依然存在。
但是变量离开函数范围后,变量则不存在了。如果内部函数用到外部函数的变量,则离开外部函数执行后,这些外部变量都还在。

<style>
li{ width:200px; height:30px;}
</style>
<script type="text/javascript">
window.onload = function()
{
//alert("test");
var oLis = document.getElementsByTagName("li");
for(var i = 0; i < oLis.length; i++)
{
/*
//方式一
oLis.item(i).onclick = function(){//进行循环时,没有执行show(i)这行代码。
show(i);//原因:function(){show(i);}像一个变量,赋给了左边的事件。只定义未执行。
}*/

//方式二
//如果想解决这个问题,则可以用下面方法。
//执行一个方法有两种方式,一种是funcName+(),另一种是事件触发。
(function(k){
oLis.item(k).onclick = function(params){
//alert(params);//如果点击ee,则params等于click clientX=58, clientY=142
show(k);//k为私有变量。外面不能访问k,但函数内部可以访问外部和全局变量,这就是闭包。
}//每运行一次,k就销毁一次,彼此之间没有关系。
})(i);
}
function show(n)
{
alert(n);
}
}

</script>

<ul>
<li>aa</li>
<li>bb</li>
<li>cc</li>
<li>dd</li>
<li>ee</li>
</ul>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值