(14)javascript 函数表达式 递归、闭包
函数表达式
1 函数声明
function functionName(){}
2 函数表达式 //匿名函数
var functionName = function(){};
递归
function factorial(num){
if(num<=1){
return 1;
}else{
return num*factorial(num-1);//return num*arguments.callee(num-1);
}
}
闭包
1 闭包和变量
闭包只能取到包含函数中任何变量的组后一个值
function createFunctions(){
var result = new Array();
for(var i=0;i<10;i++){
result[i] = function(){
return i;
};
return result;
}//因为每个result[i]返回的都是i,但是i最终的值都是9
}
2 内存泄露
如果在闭包的作用域中保存着一个html元素,那么该元素将无法销毁。
function assignHandler(){
var element = document.getElementById("obj");
element.onclick = function(){}
}
由于匿名函数保存了一个assignhandler()的活动对象的引用
因此导致无法减少element的引用数。只要匿名函数存在,element的引用数至少为1.那就是占用的内存永远不会被回收。
不过这个问题可以这样解决
function assignHandler(){
var element = document.getElement("obj");
element.onclick = function(){};
element = null;
}
3 模仿块级作用域
(function(){})();后面的()是代表立即执行
function add(num){return num;}
add(4);可以换成(function(){})
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。