惰性函数定义模式 使用方法

 更新时间:2007年09月20日 19:55:43   作者:  

总结

惰性函数定义模式让我可以编写一些紧凑、健壮、高效的代码。用到这个模式的每一次,我都会抽空赞叹JavaScript的函数式编程能力。

JavaScript同时支持函数式和面向对象便程。市面上有很多重点着墨于面向对象设计模式的书都可以应用到JavaScript编程中。不过却没有多少书涉及函数式设计模式的例子。对于JavaScript社区来说,还需要很长时间来积累良好的函数式模式。

更新:

这个模式虽然有趣,但由于大量使用闭包,可能会由于内存管理的不善而导致性能问题。来自 FCKeditor 的FredCK改进了getScrollY,既使用了这种模式,也避免了闭包:
复制代码 代码如下:

var getScrollY = function() { 

    if (typeof window.pageYOffset == 'number') 
        return (getScrollY = getScrollY.case1)(); 

    var compatMode = document.compatMode; 
    var documentElement = document.documentElement; 

    if ((typeof compatMode == 'string') && 
               (compatMode.indexOf('CSS') >= 0) && 
               (documentElement) && 
               (typeof documentElement.scrollTop == 'number')) 
        return (getScrollY = getScrollY.case2)(); 

    var body = document.body ; 
    if ((body) && 
               (typeof body.scrollTop == 'number')) 
        return (getScrollY = getScrollY.case3)(); 

    return (getScrollY = getScrollY.case4)(); 
}; 

getScrollY.case1 = function() { 
    return window.pageYOffset; 
}; 

getScrollY.case2 = function() { 
    return documentElement.scrollTop; 
}; 

getScrollY.case3 = function() { 
    return body.scrollTop; 
}; 

getScrollY.case4 = function() { 
        return NaN; 
}; 

相关文章

  • JS获取表格视图所选行号的ids过程解析

    JS获取表格视图所选行号的ids过程解析

    这篇文章主要介绍了JS获取表格视图所选行号的ids过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • JS跳出循环的方法区别对比分析(break,continue,return)

    JS跳出循环的方法区别对比分析(break,continue,return)

    面向对象编程语法中我们会碰到break ,continue, return这三个常用的关键字,那么关于这三个关键字的使用具体的操作是什么呢?接下来通过本文给大家讲解JS跳出循环的方法区别对比分析(break,continue,return),感兴趣的朋友一起看看吧
    2023-02-02
  • 前端实现多个内容滑动轮播图效果实例

    前端实现多个内容滑动轮播图效果实例

    在前端开发中,滑动轮播图是一种常见的交互元素,用于展示多张图片或内容,这篇文章主要介绍了前端实现多个内容滑动轮播图效果的相关资料,文中给出了详细的代码示例,需要的朋友可以参考下
    2025-04-04
  • package.json与package-lock.json的区别及详细解释

    package.json与package-lock.json的区别及详细解释

    不知道大家平时在开发中有没有注意到,你的项目中有两个文件:package.json,package-lock.json,应该很多人平时都不会去关注这两个文件有啥关系吧,这篇文章主要给大家介绍了关于package.json与package-lock.json的区别及详细解释,需要的朋友可以参考下
    2022-08-08
  • JavaScript删除数组元素的方法

    JavaScript删除数组元素的方法

    这篇文章主要介绍了JavaScript删除数组元素的方法,实例分析了javascript中delete函数的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • JS实现十字坐标跟随鼠标效果

    JS实现十字坐标跟随鼠标效果

    这篇文章给大家分享一下通过JS实现十字坐标跟随鼠标效果的代码,有需要的朋友参考学习下吧。
    2017-12-12
  • javascript中callee与caller的区别分析

    javascript中callee与caller的区别分析

    有些小伙伴可能会问caller,callee 是什么?在javascript 中有什么样的作用?那么本篇会对于此做一些基本介绍。希望能够对大家理解javascript中的callee与caller有所帮助。
    2015-04-04
  • 基于bootstrap写的一点localStorage本地储存

    基于bootstrap写的一点localStorage本地储存

    这篇文章主要介绍了基于bootstrap写的一点localStorage本地储存,需要的朋友可以参考下
    2017-11-11
  • Sublime Text 3常用插件及安装方法

    Sublime Text 3常用插件及安装方法

    这篇文章主要介绍了Sublime Text 3常用插件及安装方法的相关资料,需要的朋友可以参考下
    2015-12-12
  • js判断浏览器是否支持严格模式的方法

    js判断浏览器是否支持严格模式的方法

    除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode)。顾名思义,这种模式使得Javascript在更严格的条件下运行。这篇文章给大家详细介绍了js判断浏览器是否支持严格模式的方法,有需要的朋友们可以参考借鉴。
    2016-10-10

最新评论