作家
登录

JavaScript高级程序设计高级技巧

作者: 来源: 2017-09-05 09:47:02 阅读 我要评论

  •     if (ua.match(/renren/i)) { 
  •         return 0; 
  •     } 
  •     else if (ua.match(/MicroMessenger/i)) { 
  •         return 1; 
  •     } 
  •     else if (ua.match(/weibo/i)) { 
  •         return 2; 
  •     } 
  •     return -1; 
  • 这个函数的感化是断定用户是在哪个情况打开的网页,以便于统计哪个渠道的效不雅比较好。

    这种类型的断定都有一个特点,就是它的结不雅是逝世的,不管履行断定若干次,都邑返回雷同的结不雅,例如用户的UA在这个网页弗成能会产生变更(除了调试设定的之外)。所认为了优化,才有了惰性函数一说,膳绫擎的代码可以改成:

    1. //UA的类型 
    2. getUAType: function() { 
    3.     let ua = window.navigator.userAgent; 
    4.     if(ua.match(/renren/i)) { 
    5.         pageData.getUAType = () => 0; 
    6.         return 0; 
    7.     } 
    8.     else if(ua.match(/MicroMessenger/i)) { 
    9.         pageData.getUAType = () => 1; 
    10.         return 1; 
    11.     } 
    12.     else if(ua.match(/weibo/i)) { 
    13.         pageData.getUAType = () => 2; 
    14.         return 2; 
    15.     } 
    16.     return -1; 
    1. <script> 
    2.     window.global = { 
    3.         arrayData: [1, 2, 3] 
    4.     } 
    5.     console.log("parent arrayData installof Array: " +  
    6.           (window.global.arrayData instanceof Array)); 
    7. </script> 
    8. <iframe src=http://developer.51cto.com/art/201709/"iframe.html"></iframe> 

    在每次断定之后,把getUAType这个函数从新赋值,变成一个新的function,而这个function直接返回一个肯定的变量,如许今后的每次获取都不消再断定了,这就是惰性函数的感化。你可能会嗣魅这么几个断定能优化若干时光呢,这么点时光对于用户来说5滨是没有区其余呀。确切如斯,然则作为一个有寻求的码农,照样会想办法尽可能优化本身的代码,而不是只是为了完成需求完成功能。并且当你的┞封些优化累积到一个量的时刻就会产生质变。我上大年夜学的时刻C++的师长教师举了一个例子,说有个体系比较慢找她去看一下,个中她做的一个优化是把小数的双精度改成单精度,最后是快了不少。

    但其实膳绫擎的例子我们有一个更简单的实现,那就是直接搞个变潦镀起来就好了:


        推荐阅读

        JS高级程序设计高级技巧

      本篇是看的《JS高等法度榜样设计》第23章《高等技能》做的读书分享。本篇按照书里的思路根据本身的懂得和经验,进行扩大延长,同时指出版里的一些问题。将会评论辩论安然的类型检测、惰性>>>详细阅读


      本文标题:JavaScript高级程序设计高级技巧

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

    关键词: 探索发现

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

    网友点评
    自媒体专栏

    评论

    热度

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