封装一个cout方法,能实现如此调用:cout(a)(b)(c)(d)(e)… 并且返回的值为参数连剩的结果,即a*b*c*d*e*…。如cout(1)(3)(7) 得到21
2016-02-19 23:03
513 查看
function add(x){var sum =x;
//使用闭包,存储内部变量sumvar tmp =function(y){sum *=y;
return tmp;
}
//重写temp函数的toString方法
tmp.toString=function(){
return sum;
}
return tmp;
}
console.log(cout(2)(3)(4)(5));首先要一个数记住每次的计算值,所以使用了闭包,在tmp中记住了x的值,第一次调用add(),初始化了tmp,并将x保存在tmp的作用链中,然后返回tmp保证了第二次调用的是tmp函数,后面的计算都是在调用tmp, 因为tmp也是返回的自己,保证了第二次之后的调用也是调用tmp,而在tmp中将传入的参数与保存在作用链中x相加并付给sum,这样就保证了计算;但是在计算完成后还是返回了tmp这个函数,这样就获取不到计算的结果了,我们需要的结果是一个计算的数字那么怎么办呢,首先要知道JavaScript中,打印和相加计算,会分别调用toString或valueOf函数,所以我们重写tmp的toString和valueOf方法,返回sum的值;
参考:
http://www.css88.com/archives/5147
http://blog.csdn.net/bbirdsky/article/details/8686201
相关文章推荐
- 深入理解PHP之匿名函数
- Ruby中使用Block、Proc、lambda实现闭包
- LUA中的闭包(closure)浅析
- Lua中的闭包学习笔记
- C#中函数的创建和闭包的理解
- 深入理解javascript作用域和闭包
- javascript作用域和闭包使用详解
- 谈谈JavaScript中的函数与闭包
- 细品javascript 寻址,闭包,对象模型和相关问题
- JavaScript中的闭包原理分析
- 浅谈javascript中的闭包
- 学习javascript的闭包,原型,和匿名函数之旅
- javascript 闭包详解
- JavaScript 匿名函数和闭包介绍
- JavaScript 闭包深入理解(closure)
- 深入理解JavaScript 闭包究竟是什么
- 谈谈我对JavaScript原型和闭包系列理解(随手笔记8)
- 解决js函数闭包内存泄露问题的办法
- JavaScript中的闭包(Closure)详细介绍
- javascript从作用域链谈闭包