作者:zccst
1,递归
2,闭包
3,变量作用域。
js的作用域离开for循环后,变量依然存在。
但是变量离开函数范围后,变量则不存在了。如果内部函数用到外部函数的变量,则离开外部函数执行后,这些外部变量都还在。
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>