几个概念:javascript闭包及柯里化
2013-04-27 11:14
387 查看
关于闭包的概念,先来看一段简单的小程序。
实际上输出的是test1。f是clojure内部的一个function,因为f被外部调用它使得他的“父”function clojure也被链式保留下来,而f内使用的变量实际上会顺着这个链向上找。本例中f顺着链向上找到scope = "test1";试想如果不能在clojure中找到scope,那么就会到全局中继续找scope。这个就是闭包。
或者我们取某个特性来定义闭包,闭包就是函数内能够读取内部变量的函数,或者说函数内返回函数(可能有失偏颇但容易理解)。
大家可能觉得闭包的概念很眼熟,看起来很像类,实例变量,方法。实际上,闭包可以很容易去模拟一个类。
参考:
这篇比较通俗易懂 http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html
这篇稍微进阶一些 http://coolshell.cn/articles/6731.html
这篇扩展了一下到各种语言的闭包 http://www.ibm.com/developerworks/cn/linux/l-cn-closure/
关于柯里化的概念,实际上是建立在闭包的基础之上的,也来看一段小程序。
所以,柯里化其实是把本来要接受n个参数的函数分解为接受n-1个参数函数+1个已固定值。
柯里化的这种便利带来了很多好处,使得他更加灵活,具体例子可以参考第一份文档。
参考:
简单的入门+应用 http://www.yiiyaa.net/1314
一个稍微难一点的问题 http://sjpsega.iteye.com/blog/1700320
var scope = "test"; function clojure(){ var scope = "test1"; function f() { return scope; } return f; } clojure()();他的结果是???
实际上输出的是test1。f是clojure内部的一个function,因为f被外部调用它使得他的“父”function clojure也被链式保留下来,而f内使用的变量实际上会顺着这个链向上找。本例中f顺着链向上找到scope = "test1";试想如果不能在clojure中找到scope,那么就会到全局中继续找scope。这个就是闭包。
或者我们取某个特性来定义闭包,闭包就是函数内能够读取内部变量的函数,或者说函数内返回函数(可能有失偏颇但容易理解)。
大家可能觉得闭包的概念很眼熟,看起来很像类,实例变量,方法。实际上,闭包可以很容易去模拟一个类。
参考:
这篇比较通俗易懂 http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html
这篇稍微进阶一些 http://coolshell.cn/articles/6731.html
这篇扩展了一下到各种语言的闭包 http://www.ibm.com/developerworks/cn/linux/l-cn-closure/
关于柯里化的概念,实际上是建立在闭包的基础之上的,也来看一段小程序。
var scope = "test"; function currying(welcome){ return function(name) { return welcome + "," + name; } } var prefix = currying("hello"); prefix("world");可以看到,实际上输出hello, world是分了两步调用的,第一步只是传入了hello,第二步才传入了world,第一步调用实际上返回的是一个函数,第二步调用才是实际的值。
所以,柯里化其实是把本来要接受n个参数的函数分解为接受n-1个参数函数+1个已固定值。
柯里化的这种便利带来了很多好处,使得他更加灵活,具体例子可以参考第一份文档。
参考:
简单的入门+应用 http://www.yiiyaa.net/1314
一个稍微难一点的问题 http://sjpsega.iteye.com/blog/1700320
相关文章推荐
- javascript中闭包概念与用法深入理解
- javascript中闭包的概念
- JavaScript高级之闭包的概念及其应用
- 【javascript基础】由demo来进阶学习闭包等概念
- javascript之块级作用域的概念和闭包
- 前端,别闹 学习Javascript闭包(Closure)及几个经典面试题理解
- javascript中闭包的概念
- 深入浅出理解JavaScript的闭包概念
- javascript中重要概念-闭包-深入理解
- javascript相关事件的几个概念
- javascript,jquery(闭包概念)
- javaScript——作用域和闭包概念
- Java:几个基本概念 IDE/SDK(JDK)/Tomcat/JavaBean/Serverlet/JSP/JavaScript
- JavaScript概念总结:作用域、闭包、对象与原型链
- 深入浅出理解JavaScript的闭包概念
- JavaScript中的几个关键概念的理解-原型链的构建
- javascript中的闭包概念
- javascript相关事件的几个概念
- javascript,jquery(闭包概念)
- javascript,jquery(闭包概念)(转)