`
RednaxelaFX
  • 浏览: 3049383 次
  • 性别: Icon_minigender_1
  • 来自: 海外
社区版块
存档分类
最新评论

几个不错的JavaScript文章链接

阅读更多
Douglas Crockford的JavaScript专题站
光是这个专题站里的链接就够看好段时间了.很多都很有趣,其中我比较有爱的是这篇:
Curried JavaScript functions
里面有些有趣的例子.例如这个:
引用
function add(a, b) {
    if (arguments.length < 1) {
        return add;
    } else if (arguments.length < 2) {
        return function(c) { return a + c }
    } else {
        return a + b;
    }
}


如果是有读过我前面几篇blog文的人,或许会见到我经常用这个例子:
function add( lhs ) {
    return function ( rhs ) {
        return lhs + rhs
    }
}

其实做的就是currying,把本来应该一般常识是接受两个参数(lhs和rhs)的add变成只接受一个(rhs)的并将函数(这里是指那个匿名函数)返回.不过具体"形式"与currying不一样.前面引用的那段代码就是真正写成currying形式的版本.

那篇文章也给出了泛用版的curry函数:
引用
function curry(func,args,space) {
    var n  = func.length - args.length; //arguments still to come
    var sa = Array.prototype.slice.apply(args); // saved accumulator array
    function accumulator(moreArgs,sa,n) {
        var saPrev = sa.slice(0); // to reset
        var nPrev  = n; // to reset
        for(var i=0;i<moreArgs.length;i++,n--) {
            sa[sa.length] = moreArgs[i];
        }
        if ((n-moreArgs.length)<=0) {
            var res = func.apply(space,sa);
            // reset vars, so curried function can be applied to new params.
            sa = saPrev;
            n  = nPrev;
            return res;
        } else {
            return function (){
                // arguments are params, so closure bussiness is avoided.
                return accumulator(arguments,sa.slice(0),n);
            }
        }
    }
    return accumulator([],sa,n);
}

function add (a,b,c){ 
      if (arguments.length < this.add.length) {
        return curry(this.add,arguments,this);
      }  
      return a+b+c;
}
  
alert(add()(1,2,4));      // 7
alert(add(1)(2)(5));      // 8
alert(add(1)()(2)()(6));  // 9
alert(add(1,2,7,8));      // 10

相当有趣.详细还是到原文去看吧~
分享到:
评论
1 楼 RednaxelaFX 2007-11-17  
JavaScript Source
这名字真够响亮的。一个据说拥有大量可cut-and-paste的JavaScript代码的网站……留待观察

相关推荐

    JavaScript生成文章目录导航

    生成JavaScript文章目录导航主要涉及以下几个关键知识点: 1. **HTML结构**:首先,HTML文档中需要有合适的标题元素(`&lt;h1&gt;`到`&lt;h6&gt;`),这些元素将被JavaScript解析并用于构建目录。例如,一级标题使用`&lt;h1&gt;`,二...

    JavaScript经典效果集锦

    文章开头提到了几个简单的JavaScript技巧: - **163首页显示效果**:这可能是指在163首页上使用的某些JavaScript效果,如弹窗、滚动文字等。 - **图片展示**:虽然没有具体说明如何实现,但通常指的是使用...

    QT的几个文章

    在“QT的几个文章”这个主题中,我们可以深入探讨以下几个关于QT的知识点: 1. **Qt库的核心概念**: - **信号与槽机制**:这是Qt最核心的设计模式,允许对象间通信而无需知道彼此。当一个对象的信号被触发时,与...

    discuz论坛插件DZ插件 文章内容链接新窗口

    的模板文件或使用 hook(钩子)机制,在论坛的文章内容中添加JavaScript代码,当检测到链接被点击时,触发新窗口的打开。 2. **配置选项**:安装插件后,管理员通常可以在后台设置是否启用此功能,以及新窗口的...

    javascript 圆形大转盘 抽奖 源代码.zip

    - 王德封-逐浪 - CSDN博客.url":这个链接指向了一个CSDN博客文章,详细阐述了jQuery中几种常见的DOM就绪事件处理函数的区别,这对于理解如何在页面加载完成后正确执行JavaScript代码至关重要。 5. "牛股大转盘 好股...

    挑战javascript&ajax应用开发

    AJAX 请求分为几个步骤:创建对象、打开连接、设置请求方法和参数、发送请求、处理响应。XML 不再是 AJAX 数据格式的唯一选择,现在更常见的是 JSON,因为其更简洁且易于解析。 **JavaScript & AJAX 应用** 1. **...

    JavaScript实现树状结构展现

    一个简单的树节点通常包含以下几个属性:`value`(节点值)、`children`(子节点数组)和`parent`(父节点)。例如: ```javascript function TreeNode(value) { this.value = value; this.children = []; this....

    JavaScript面向对象程序设计

    一个对象可以链接到另一个对象的原型,从而继承其属性和方法。ES6引入了类语法,但本质上仍然是基于原型的继承。 3. **多态**:JavaScript的函数是第一类对象,这意味着它们可以作为值传递,存储在变量中,甚至作为...

    程序天下:JavaScript实例自学手册

    8.6 一个链接打开两个地址 8.7 为链接提供下拉菜单 8.8 按钮链接 8.9 弹出鼠标所指的链接地址 8.10 链接的注释 8.11 为超链接同时绑定单击和双击事件 8.12 带链接的滚动字幕 8.13 会跳舞的链接 8.14 检测站点的连接...

    php与ajax实现文章管理.rar

    在文件“文章管理”中,可能包含了以下几个部分: 1. HTML/CSS文件:定义了用户界面的结构和样式,包括文章列表、添加/编辑表单等。 2. JavaScript文件:包含了AJAX请求的逻辑,以及可能的前端验证和用户交互处理。 ...

    javascript

    JavaScript作为一种强大的客户端脚本语言,在过去几十年里经历了起伏不定的发展历程。随着技术的进步和互联网基础设施的改善,JavaScript已经成为现代Web开发不可或缺的一部分。通过O'Reilly出版社提供的丰富资源和...

    JavaScript实现Array(数组)和Map

    与数组不同,Map的键是有序的,并且提供了几个方便的方法,如set(key, value)用于设置键值对,get(key)用于获取键对应的值,delete(key)用于删除键值对,size属性用于获取Map中键值对的数量。`map.js` 文件可能会...

    动力文章系统源码(动易文章系统)

    对于动易文章系统而言,其源码可能包括以下几个主要组成部分: 1. **前端展示**:这部分源码主要负责用户在浏览器上看到的网页设计和交互效果,通常使用HTML、CSS和JavaScript编写。开发者可以通过修改这部分代码来...

    《程序天下:JavaScript实例自学手册》光盘源码

    8.6 一个链接打开两个地址 8.7 为链接提供下拉菜单 8.8 按钮链接 8.9 弹出鼠标所指的链接地址 8.10 链接的注释 8.11 为超链接同时绑定单击和双击事件 8.12 带链接的滚动字幕 8.13 会跳舞的链接 8.14 检测站点的连接...

    php+mysql文章发布系统

    在本系统中,通常会创建以下几个关键表: 1. `articles`:存储文章的基本信息,如文章ID、标题、内容、作者、发布时间等。 2. `categories`:用于分类管理,包含类别ID和类别名称。 3. `tags`:用于文章标签,每个...

    HTML技术有css javascript

    Web技术之家文章简介:HTML网页超链接标记学习教程 链接标记的属性 链接是网页页面中最重要的元素之一,是一个网站的灵魂。一个网站是由多个页面组成的,页面之间依靠链接确定相互的导航关系。每一个网页都有...

    3D rose written by JavaScript

    通过分析这个3D玫瑰项目,我们可以学习到以下几个关键知识点: 1. **JavaScript基础**:理解变量、数据类型、函数、对象等基本概念,这是编写任何JavaScript代码的基础。 2. **3D图形编程**:了解如何在2D平面上...

    JavaWeb 入门级项目实战 -- 文章发布系统

    我们将主要涉及到以下几个核心知识点: 1. **Servlet与JSP**:作为JavaWeb开发的基础,Servlet用于处理HTTP请求,而JSP则用于生成动态网页内容。在这个项目中,Servlet通常用于处理用户提交的表单数据,如登录验证...

    php168万能文章系统

    系统的核心组件包括以下几个关键文件: 1. **post.php**:这是用于创建和编辑文章的后台接口。它可能包含文章的添加、修改、预览和发布等功能,允许管理员对文章内容进行详尽的控制。 2. **global.php**:全局配置...

    C#做的WEB文章发布系统

    这个目录可能包括以下几个关键部分: 1. Models:存放数据模型类,如Article、User等,它们定义了文章和用户的数据结构。 2. Controllers:包含处理HTTP请求的控制器类,如NewsController,负责处理文章的CRUD...

Global site tag (gtag.js) - Google Analytics