//非惰性函数与惰性函数
//alert("test");
//来看看js另人意外的东西
var a=2;
function getA(x){
return x;
}
console.info(getA(a,a=a*2)); //2
console.info(getA(a)); //这里的值是4
//这是由于javaScript支持非惰性求值,上面的结果才会成这样
//下面的这种写法会崩掉
function f(){
}
/*
f(function(){
while(true){
}
}(););
*/
//解释一种概念
//惰性函数模式是一种将对函数或请求的处理延迟到真正需要结果时进行的通用概念
//惰性编程可以消除不必要的计算
//来个例子三步变
var t;
function f(){
t=t ? t :new Date();
return t;
}
f();
//上述代码使用全局变量t来存储时间对象,那么每次调用函数都得重新求值
//代码的执行效率没有得到优化
//存在安全隐患,值会被误改
//用闭包改下
var f1=(function(){
var t;
return function(){
t=t?t:new Date();
return t;
}
})();
//右边的为自执行函数返回一个函数f1
f1();
//闭包解决了安全性的问题,但未被解决多次求值的情况
//再做一个变换
var f2=function(){
var t=new Date();
f2=function(){
return t;
};
return f2();
};
f2();
//上述代码解决了所提的所有问题
//用了闭包,但返回的是一个确切的值,不管调用多少次,都是f2()的返回值,且存在