博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js -- 写个闭包
阅读量:4918 次
发布时间:2019-06-11

本文共 1606 字,大约阅读时间需要 5 分钟。

'use strict';
function lazy_sum(arr) {    var sum = function () { return arr.reduce(function (x, y) { return x + y; }); } return sum; }
var f = lazy_sum([1, 2, 3, 4, 5]); // function sum()
f(); // 15 在这个例子中,我们在函数lazy_sum中又定义了函数sum,并且,内部函数sum可以引用外部函数lazy_sum的参数和局部变量,当lazy_sum返回函数sum时,相关参数和变量都保存在返回的函数中,这种称为“闭包(Closure)”的程序结构拥有极大的威力。 闭包的特性

  当我们调用lazy_sum()时,每次调用都会返回一个新的函数,即使传入相同的参数:

var f1 = lazy_sum([1, 2, 3, 4, 5]); var f2 = lazy_sum([1, 2, 3, 4, 5]); f1 === f2; // false

  f1()f2()的调用结果互不影响。

 

没有class机制,只有函数,借助闭包,封装一个私有变量:
'use strict';function create_counter(initial) { var x = initial || 0; return { inc: function () { x += 1; return x; } } } 调用:
var c1 = create_counter();c1.inc(); // 1c1.inc(); // 2c1.inc(); // 3var c2 = create_counter(10); c2.inc(); // 11 c2.inc(); // 12 c2.inc(); // 13 就是这么神奇; 很久很久以前,有个叫阿隆佐·邱奇的帅哥,发现只需要用函数,就可以用计算机实现运算,而不需要0、1、2、3这些数字和+、-、*、/这些符号。 JavaScript支持函数,所以试试用JavaScript用函数来写这些计算。
// 定义加法:function add(n, m) {    return function (f) {        return function (x) {            return m(f)(n(f)(x));        }    }}

// 计算数字2 = 1 + 1:

  var two = add(one, one);

// 计算数字3 = 1 + 2:

  var three = add(one, two);

// 计算数字5 = 2 + 3:

  var five = add(two, three);

// 给3传一个函数,会打印3次:

  (three(function () {
    console.log('print 3 times');
  }))();

// 给5传一个函数,会打印5次:

  (five(function () {
    console.log('print 5 times');
  }))();

是不是很有意思   哈哈哈哈   代码真的很神奇呀 ;哈哈哈  源码来源 https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/00143449934543461c9d5dfeeb848f5b72bd012e1113d15000 感谢廖大神;这么神奇的用法  好玩儿呀 ;

转载于:https://www.cnblogs.com/lipuqing180906/p/10001101.html

你可能感兴趣的文章
html5新特性之DOCTYPE声明
查看>>
POJ 3299 Humidex 难度:0
查看>>
快速切题 poj3414 Pots
查看>>
Linux 常用命令
查看>>
五家共井(第1届第3题)
查看>>
c文件操作
查看>>
《Spring In Action》 读书笔记(2) -- bean装配 ...
查看>>
很好很強大..
查看>>
Oracle之子查询:Top-N问题
查看>>
PAT:1011. A+B和C (15) AC
查看>>
JS中的内置对象
查看>>
Android--在Android应用中愉快地写C/C++代码(转)
查看>>
IOSUIcontrol事件
查看>>
docker 部署spring.boot项目【一】(引用外部配置文件)
查看>>
CSS 巧用 :before和:after
查看>>
Winform——用户登陆
查看>>
【博客园IT新闻】博客园IT新闻 iPhone 客户端发布
查看>>
Zookeeper通过java创建、查看、修改、删除znode
查看>>
Web设计师应该避免的 6 大错误
查看>>
强化学习(基本概念)
查看>>