珂理化函数

有个需求:过一秒后执行fn,传递一个数字100,让fn中的this变为obj,输出"柯理化函数100"
    var name = "window";

    var obj = {name: "柯理化函数"};

    function fn(e, num) {
        console.log(this.name + num);
    }

 

 第一种思路,常规想法:

    window.setTimeout(fn, 1000);//->this window ->windowundefined

    window.setTimeout(fn,1000)
    document.addEventListener("click",fn,false);

  1)不灵活控制this
  2)不能传递形参的值

    window.setTimeout(function () {
            fn.call(obj, 100);
        }, 1000);

  

用珂理化函数来解决:

    function bind(callBack, context) {
        var outerArg = Array.prototype.slice.call(arguments, 2);
        return function () {
            var innerArg = Array.prototype.slice.call(arguments, 0);
            var arg = innerArg.concat(outerArg);
            callBack.apply(context, arg);
        }
    }

  

 window.setTimeout(bind(fn, obj, 100, 200), 1000); //珂理化函数200
    window.setTimeout(function () {
        fn.apply(obj, [100, 200]); //珂理化函数200
    }, 1000);

    document.addEventListener("click", bind(fn, obj, 100, 200), false); //珂理化函数100
    document.addEventListener("click", function (e) {
        fn.apply(obj, [e, 100, 200]);  //珂理化函数100
    }, false);

  

时间: 2024-10-12 16:05:48

珂理化函数的相关文章

JS函数式编程【译】4.1 部分函数应用和珂理化

?? Functional Programming in Javascript 主目录第四章 在Javascript中实现函数式编程的技术 部分函数应用和珂理化 许多语言支持可选参数,但是Javascript不支持.Javascript采用一种完全不同的模式,它任允许意数量的参数传给函数. 这就给一些有趣且非同寻常的设计模式留下了门路.函数可以全部或部分应用. 部分应用在Javascript中的处理方式是:给函数的一个或多个参数绑定上值,然后返回另一个函数接受剩余的未绑定参数. 同样,珂理化的处

JS高阶编程技巧--柯理化函数

首先看一段代码: let obj = { x: 100 }; function fn(y) { this.x += y; console.log(this); } 现在有一个需求:在1秒后,执行函数fn,并让其this指向obj. 如果写成 setTimeout(fn, 1000); 这么写的话,fn函数中的this是指向window的,而且也没有传递参数. 如果写成 setTimeout(fn(200), 1000); 这么写的话,this指向依然是window,而且相当于立即执行fn函数,并

函数柯理化

通常创建柯理化函数的方式: function curry(fn){ var args = Array.prototype.slice.call(arguments, 1); return function(){ var innerArgs = Array.prototype.slice.call(arguments), finalArgs = args.concat(innerArgs); return fn.apply(null, finalArgs); }; } curry函数的主要任务是安

JS函数式编程【译】4.2 函数组合

?? Functional Programming in Javascript 主目录第四章 在Javascript中实现函数式编程的技术 函数组合 终于,我们到了函数组合. 在函数式编程中,我们希望一切都是函数,尤其希望是一元函数,如果可能的话.如果可以把所有的函数转换为一元函数, 将发生神奇的事情. 一元函数是只接受单个输入的函数.函数如果有多个输入就是多元的,不过我们一般把接受两个输入的叫二元函数, 把接受三个输入的叫三元函数. 有的函数接受的输入的数量并不确定,我们称它为可变的. 操作函

javascript中利用柯里化函数实现bind方法

柯理化函数思想:一个js预先处理的思想:利用函数执行可以形成一个不销毁的作用域的原理,把需要预先处理的内容都储存在这个不销毁的作用域中,并且返回一个小函数,以后我们执行的都是小函数,在小函数中把之前预先存储的值进行相关的操作处理即可: 柯里化函数主要起到预处理的作用: bind方法的作用:把传递进来的callback回调方法中的this预先处理为上下文context; /** * bind方法实现原理1 * @param callback [Function] 回调函数 * @param con

scala函数进阶篇

1.求值策略scala里有两种求值策略Call By Value -先对函数实参求值,在函数体中用这个求出的参数值.Call By Name -先不对函数实参求值,而是函数实参每次在函数体内被用到时都会求值.scala通常使用Call By Value 如果函数形参类型以 =>开头,那么就是在使用Call By Namedef foo(x : Int)= x         //Call By Valuedef foo(x : => Int)= x   //Call By Name def l

[原创译书] JS函数式编程 2.1 函数式编程语言

?? Functional Programming in Javascript 主目录第二章 函数式编程基础 函数式编程语言 函数式编程语言是那些方便于使用函数式编程范式的语言.简单来说,如果具备函数式编程所需的特征, 它就可以被称为函数式语言.在多数情况下,编程的风格实际上决定了一个程序是否是函数式的. 是什么让一个语言具有函数式特征? 函数式编程无法用C语言来实现.函数式编程也无法用Java来实现(不包括那些通过大量变通手段实现的近似函数式编程). 这些语言不包含支持函数式编程的结构.他们是

scala初学笔记

tips: 1.函数的定义: def addOne(m: Int): Int = m + 1 m为参数,要指定其类型,Int: 后边跟着返回值的类型,Int= 后边是函数的内部 2.匿名函数: (x: Int) => m + 1 3.匿名函数赋值: val add = (x: Int) => m + 1 4.如果函数有多个表达式 def addOne(m: Int): Int = { m + 1}若没有return则最后行作为return { m: Int => m * 2}当函数作为值

蝴蝶书学习笔记

p.p1 { margin: 0.0px 0.0px 2.0px 0.0px; font: 14.0px ".PingFang SC"; color: #454545 } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px ".PingFang SC"; color: #454545 } p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helv