var fn9 = (function () {var arr = {}; //缓存对象var counter = function (arr) { //计算函数//args也就是fn9(1, 2, 3, 4, 5);的 参数var sum = 0;//求和for (var i = 0; i < arr.length; i++) {sum += arr[i];}console.log("counter",sum);return sum;//生成属性名}return function () {//其实本质就是arguments这个对象使用了数组的slice这个方法,得到了参数构成的数组var args = Array.prototype.slice.call(arguments,0); //arguments转换成数组// console.log(args,"ar");var key = args.join(","); //将args用逗号连接成字符串//1,2,3,4,5console.log(key);var result, tSum = arr[key];//对象名1,2,3,4,5:  得到对象名// console.log(arr[key]);// console.log(tSum);if (tSum) { //如果缓存中已存在   console.log('从缓存中取:', arr) //打印方便查看result = tSum;} else {//重新计算,并存入缓存同时赋值给resultresult = arr[key] = counter(args);//  result的值来自counterconsole.log('存入缓存:', arr) //打印方便查看}return result;}})();console.log(fn9(1, 2, 3, 4, 5));  //return  15//     fn9(1, 2, 3, 4, 5);//    console.log( fn9(1, 2, 3, 4, 5, 6));//  21//     fn9(1, 2, 3, 4, 5, 8);//     fn9(1, 2, 3, 4, 5, 6);

Array.prototype.slice.call(arguments,0); 上下调用模型相关推荐

  1. js Array.prototype.slice.call(arguments,0) 理解

    Array.prototype.slice.call(arguments,0) 经常会看到这段代码用来处理函数的参数 网上很多复制粘帖说:Array.prototype.slice.call(argu ...

  2. Array.prototype.slice.call(arguments)

    Array.prototype.slice.call(arguments)能将具有length属性的对象转成数组,除了IE下的节点集合(因为ie下的dom对象是以com对象的形式实现的,js对象与co ...

  3. Array.prototype.slice.apply(arguments)和[].slice.apply(arguments)解析

    我们知道,函数内部 arguments 是一个类数组对象,不是真正的数组,因此也无法使用数组的各种方法.想详细了解 argument 对象可以前往函数中的 arguments. (function f ...

  4. 详解 Array.prototype.slice.call(arguments)

    首先,slice有两个用法,一个是String.slice,一个是Array.slice,第一个返回的是字符串,第二个返回的是数组 在这里我们看第二个方法 1.在JS里Array是一个类 slice是 ...

  5. [转] 理解 JavaScript 中的 Array.prototype.slice.apply(arguments)

    假如你是一个 JavaScript 开发者,你可能见到过 Array.prototype.slice.apply(arguments) 这样的用法,然后你会问,这么写是什么意思呢? 这个语法其实不难理 ...

  6. [转载]Array.prototype.slice.call(arguments,1)原理

    Array.prototype.slice.call(arguments,1)该语句涉及两个知识点. arguments是一个关键字,代表当前参数,在javascript中虽然arguments表面上 ...

  7. Array.prototype.slice.call(arguments)对象转成数组

    转成数组的通用函数 1 var toArray = function(s){ 2 try{ 3 return Array.prototype.slice.call(s); 4 } catch(e){ ...

  8. Array.prototype.slice.call()方法详解

    在很多时候经常看到Array.prototype.slice.call()方法,比如Array.prototype.slice.call(arguments),下面讲一下其原理: 1.基本讲解 1.在 ...

  9. Array.prototype.slice.call

    Array.prototype.slice.call(arguments,0)就类似于arguments.slice(0),但因为arguments不是真正的Array,所以它没有slice这个方法. ...

最新文章

  1. Beyond Compare比较Word文件的方法
  2. pc调试微信h5页面
  3. HDU - 3247 Resource Archiver(AC自动机+状压dp+bfs)
  4. Netweaver和CloudFoundry的log设置
  5. idea cloud bootstrap是啥_application.yml与bootstrap.yml的区别
  6. C语言课后习题(48)
  7. git commit –a时使用vim编辑提交信息
  8. Ubuntu16.04下配置laravel
  9. meta你到底了解多少
  10. day_log 12月份的
  11. 浏览器的id_亚马逊账号关联因素之浏览器是重中之重-亚马逊运营必知
  12. springboot 运行jar文件报 “XXX中没有主清单属性”
  13. easyx游戏编程:魔塔(c++语言开发)源码
  14. 如何使用思维导图做计划的6种模板类型
  15. Python | Python保存高维数组array,Python用pandas将numpy保存csv文件,Python保存3维数组
  16. 网络摄像头RTSP直播方案(三)
  17. 透彻理解SLAM中的非线性最小二乘问题
  18. 出租权不适用于计算机软件,TRIPS协议下我国软件产业知识产权保护问题研究
  19. 【区块链开发入门】(四) Truffle详解篇2
  20. [Fabric] 第11章 Fabric CA应用与配置

热门文章

  1. Makefile中.PHONY伪目标的作用(完整)
  2. 日本展示类人机器人 强大功能引发伦理思考
  3. 【转】android 蓝牙
  4. 【Windows使用笔记】Windows日常使用软件
  5. 单数行一个颜色,双数行一个颜色
  6. viewport视口的概念
  7. 笔记之一:关于.net MVC的分部视图
  8. 异常处理的try语句
  9. 淘宝陈皓微博引发关于Git和GitHub讨论
  10. 【C语言】C语言实现的无页面扫雷游戏 2.0