继上次整理,一些东西没有整理完。就写在这。可能比较乱比较杂,因为都是整理的一些东西,也没有到做成专题的程度。

1.String.repeat()

大家要实现重复一个字符串的重复怎么写呢,反正我的第一想法就是:

function repeat(str,n){
var sum='';
for (var i = 0; i <n; i++) {
sum+=str;
};
return sum;
}
console.log(repeat('ab',3));

其实优化就是把多于的变量消除,多了一个sum变量,总是不太好的,然而人家想的总是比较好的,内置的方法,没有中间变量:

function repeat(target,n){
return (new Array(n+1)).join(target);
}
function repeat(target,n){
return [].join.call({length:n+1},target)
}

这是某框架里的,像这样的函数其实蛮多的,作者这代码的质量一看就…


中间休息分享兼容问题:

unshift ie6.7下不返回长度

splice一个参数的情况下,ie6、7、8默认为0,其他浏览器默认为数组length


2.bind()

bind经常用在本地上下文下调用非本地上下文的函数,跟apply,call差不多,其实源码就是封装了apply:

Function.prototype.bind = function(context) {
if (arguments.length<2&&context==void 0) { //context为空返回this
return this;
}
var __method=this,args=[].slice.call(arguments,1);//取到context后面的参数
return function(){ //执行此方法,传入context环境
return __method.apply(context,args.concat.apply(args,arguments));
}
}

3.柯里化函数curry

function curry(fn){
function inner(len,arg){
if (len==0) {
return fn.apply(null,arg)
};
return function(x){
return inner(len-1,arg.concat(x));
}
}
return inner(fn.length,[])
}

一个函数返回另一个函数,第一个参数是参数的长度,没返回一次length-1,剩下的参数原封不动的扔给返回的函数,再加上新给的参数;

原本的一个

function sum(x,y,z,w){
return x+y+z+w;
}
//柯里化调用
curry(sum)('a')('b')('c')('d');

sum函数,柯里化之后就可以改变参数的传递方式,thunk也是差不多。

如果用户想传入多个参数怎么办?那我们改进一下curry:

function curry2(fn){
function inner(len,arg){
if (len<=0) {
return fn.apply(null,arg)
};
return function(){
return inner(len-arguments.length,arg.concat(Array.apply([],arguments)))
}
}
return inner(fn.length,[])
}
curry2(sum)()('b','c')('d')//'bcd'

把length依次-1改成参数减参数的长度,就能实现;

javascript之复习(框架里的方法们)的更多相关文章

  1. unittest框架里的常用断言方法:用于检查数据

    1.unittest框架里的常用断言方法:用于检查数据. (1)assertEqual(x,y) 检查两个参数类型相同并且值相等.(2)assertTrue(x) 检查唯一的参数值等于True(3)a ...

  2. javaScript DOM编程经常使用的方法与属性

    DOM是Document Object Model文档对象模型的缩写.依据W3C DOM规范,DOM是一种与浏览器,平台,语言无关的接口,使得你能够訪问页面其它的标准组件. Node接口的特性和方法 ...

  3. iframe里访问父级里的方法属性

    window.parent.attributeName;  // 访问属性attributeName是在父级窗口的属性名 window.parent.Func();  // 访问属性Func()是在父 ...

  4. [BUGCASE]CI框架的post方法对url做了防xss攻击的处理引发的文件编码错误

    一.问题描述 出现问题的链接: http://adm.apply.wechat.com/admin/index.php/order/detail?country=others&st=1& ...

  5. JavaScript客户端MVC 框架综述

    简介 15 年前,许多人都使用 Perl 和 ColdFusion 之类的工具构建网站.我们经常编写可以在页面顶部查询数据库的脚本,对数据应用必要的转换,以及在同一个脚本底部显示数据.这类架构适合于向 ...

  6. Atitit.js javascript的rpc框架选型

    Atitit.js javascript的rpc框架选型 1. Dwr1 2. 使用AJAXRPC1 2.2. 数据类型映射表1 3. json-rpc轻量级远程调用协议介绍及使用2 3.1. 2.3 ...

  7. "Timeout"在测试框架里是如何被实现的

    今天组里的小伙伴问了我一个问题:“我这里有一个底层驱动的接口,我想在测试它的时候加上超时限制,时间一过就fail掉它,执行后面的测试用例.怎么办到呢?”.我问:“它自己没有超时响应的机制么? 超时抛e ...

  8. javascript获取iframe框架中页面document对象,获取子页面里面的内容,iframe获取父页面的元素,

    javascript获取iframe框架中,加载的页面document对象 因为浏览器安全限制,对跨域访问的页面,其document对象无法读取.设置属性 function getDocument(i ...

  9. JavaScript 节点操作Dom属性和方法(转)

    JavaScript 节点操作Dom属性和方法   一些常用的dom属性和方法,列出来作为手册用. 属性:   1.Attributes 存储节点的属性列表(只读)   2.childNodes 存储 ...

随机推荐

  1. IdentityServer4【Topic】之定义客户端

    Defining Clients 定义客户端 客户端表示哪些可以从你的IdentityServer拿到token的应用. 除了一些可能会变化的细节之外,通常情况下你需要为一个客户端定义如下通用的设置: ...

  2. 【Java基础】求出1-100之间偶数和

    结果:

  3. hive子查询

    如果集合中含有空值,不能使用not in的语法指令:但是可以使用in

  4. WPF设置软件界面背景为MediaElement并播放视频

    在我们的常见的软件界面设计中我们经常会设置软件的背景为SolidColorBrush或者LinerColorBrush.RadialGradientBrush 等一系列的颜色画刷为背景,有时我们也会使 ...

  5. python数学第三天【方向导数】

    1.方向导数 2. 梯度 3. 凸函数: 4. 凸函数的判定 5. 凸函数的一般表示 6. 凸性质的应用

  6. Python2基础

    1.python 3.python函数 python的函数定义: 以def关键字定义一个函数: 参数放在小括号里面: 必须有return语句: 关键字参数: 即调用函数时传参顺序可以人为指定 默认参数 ...

  7. 【C/C++】实现龙贝格算法

    1. 复化梯形法公式以及递推化 复化梯形法是一种有效改善求积公式精度的方法.将[a,b]区间n等分,步长h = (b-a)/n,分点xk = a + kh.复化求积公式就是将这n等分的每一个小区间进行 ...

  8. TP5.x——update更新成功但是返回是0

    原因 更新的数据和表中的数据一致,这个官方文档上有说明的.所以大家使用这个语句的话需要注意 update 方法返回影响数据的条数,没修改任何数据返回 0 解决方法:我是进行了判断如何和数据库一致直接返 ...

  9. java 对象转JSON字符串 $ref 错误

    顾名思义,这个是对象转Json时,发生的引用错误. 比较简单的方法是: 使用 帮助方法 https://www.cnblogs.com/hanjun0612/p/9779781.html Conver ...

  10. 【JSOI2008】火星人prefix 哈希 非旋转treap

    题目大意 就是给你一个字符串,有三种操作,共\(m\)个 \(Q~x~y\):询问第\(x\)个后缀和第\(y\)个后缀的LCP \(R~x~y\):把第\(x\)个字符改成\(y\) \(I~x~y ...