作家
登录

10个JavaScript难点

作者: 来源: 2017-07-27 16:55:03 阅读 我要评论

  •         if (cache[key]) 
  •         { 
  •             return cache[key]; 
  •         } 
  •         else 
  •         { 
  •             var val = func.apply(this, arguments); 
  •             cache[key] = val; 
  •             return val; 
  •         } 
  •     }; 
  •  
  •  
  • var fibonacci = memoizeFunction(function(n) 
  •     return (n === 0 || n === 1) ? n : fibonacci(n - 1) + fibonacci(n - 2); 
  • }); 
  •  
  • console.log(fibonacci(100)); // 输出354224848179262000000 
  • console.log(fibonacci(100)); // 输出354224848179262000000  
  • 6. 变量晋升

    代铝闼楝第2次计算fibonacci(100)则只须要在内存中直接攫取结不雅。

    10. 函数重载

    所谓函数重载(method overloading),就是函数名称一样,然则输入输出不一样。或者说,许可某个函数有各类不合输入,根据不合的输入,返回不合的结不雅。凭直觉,函数重载可以经由过程if...else或者switch实现,这就不去管它了。jQuery之父John Resig提出了一个异常巧(bian)妙(tai)的办法,应用了闭包。

    可贵在于,people.find只能绑定一个函数,那它为何可以处理3种不合的输入呢?它弗成能同时绑定3个函数find0,find1与find2啊!这里的关键在于old属性。

    由addMethod函数的调用次序可知,people.find最终绑定的是find2函数。然而,在绑定find2时,old为find1;同理,绑定find1时,old为find0。3个函数find0,find1与find2就如许经由过程闭包链接起来了。

    根据addMethod的逻辑,当f.length与arguments.length不匹配时,就会去调用old,直到匹配为止。

    代铝闼楝外部函数f1只履行了一次,变量N设为0,并将内部函数f2赋值给了变量result。因为外部函数f1已经履行完毕,其内部变量N应当在内存中被清除,然而事实并不是如许:我们每次调用result的时刻,发明变量N一向在内存中,并且在累加。为什么呢?这就是闭包的神奇之处了!

    参考链接

    • 闭包 - MDN
    • JavaScript闭包-块级感化域和私有变量
    • Javascript持续机制的设计思惟 - 阮一峰
    • 变量晋升 - MDN
    • JS函数式编程指南
    • 浅谈JavaScript函数重载 

    【编辑推荐】

    1. 现代前端开起身术栈
    2. 前端模板的道理与实现
    3. 前端机能优化以及解决筹划
    4. 换个思路懂得Javascript中的this
    5. JavaScript语法树与代码转化实践
    【义务编辑:枯木 TEL:(010)68476606】

      推荐阅读

      [PHP内核探索]PHP中的哈希表

    笔者github上有一个简略单纯版的HashTable的实现:HashTable实现 在PHP内毫闼楝个一一个很重要的数据构培养是HashTable。我们常用的数组,在内核中就是用HashTable来实现。那么,PHP的Hash>>>详细阅读


    本文标题:10个JavaScript难点

    地址:http://www.17bianji.com/lsqh/36438.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)