javascript之复习(框架里的方法们)
继上次整理,一些东西没有整理完。就写在这。可能比较乱比较杂,因为都是整理的一些东西,也没有到做成专题的程度。
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之复习(框架里的方法们)的更多相关文章
- unittest框架里的常用断言方法:用于检查数据
1.unittest框架里的常用断言方法:用于检查数据. (1)assertEqual(x,y) 检查两个参数类型相同并且值相等.(2)assertTrue(x) 检查唯一的参数值等于True(3)a ...
- javaScript DOM编程经常使用的方法与属性
DOM是Document Object Model文档对象模型的缩写.依据W3C DOM规范,DOM是一种与浏览器,平台,语言无关的接口,使得你能够訪问页面其它的标准组件. Node接口的特性和方法 ...
- iframe里访问父级里的方法属性
window.parent.attributeName; // 访问属性attributeName是在父级窗口的属性名 window.parent.Func(); // 访问属性Func()是在父 ...
- [BUGCASE]CI框架的post方法对url做了防xss攻击的处理引发的文件编码错误
一.问题描述 出现问题的链接: http://adm.apply.wechat.com/admin/index.php/order/detail?country=others&st=1& ...
- JavaScript客户端MVC 框架综述
简介 15 年前,许多人都使用 Perl 和 ColdFusion 之类的工具构建网站.我们经常编写可以在页面顶部查询数据库的脚本,对数据应用必要的转换,以及在同一个脚本底部显示数据.这类架构适合于向 ...
- Atitit.js javascript的rpc框架选型
Atitit.js javascript的rpc框架选型 1. Dwr1 2. 使用AJAXRPC1 2.2. 数据类型映射表1 3. json-rpc轻量级远程调用协议介绍及使用2 3.1. 2.3 ...
- "Timeout"在测试框架里是如何被实现的
今天组里的小伙伴问了我一个问题:“我这里有一个底层驱动的接口,我想在测试它的时候加上超时限制,时间一过就fail掉它,执行后面的测试用例.怎么办到呢?”.我问:“它自己没有超时响应的机制么? 超时抛e ...
- javascript获取iframe框架中页面document对象,获取子页面里面的内容,iframe获取父页面的元素,
javascript获取iframe框架中,加载的页面document对象 因为浏览器安全限制,对跨域访问的页面,其document对象无法读取.设置属性 function getDocument(i ...
- JavaScript 节点操作Dom属性和方法(转)
JavaScript 节点操作Dom属性和方法 一些常用的dom属性和方法,列出来作为手册用. 属性: 1.Attributes 存储节点的属性列表(只读) 2.childNodes 存储 ...
随机推荐
- IdentityServer4【Topic】之定义客户端
Defining Clients 定义客户端 客户端表示哪些可以从你的IdentityServer拿到token的应用. 除了一些可能会变化的细节之外,通常情况下你需要为一个客户端定义如下通用的设置: ...
- 【Java基础】求出1-100之间偶数和
结果:
- hive子查询
如果集合中含有空值,不能使用not in的语法指令:但是可以使用in
- WPF设置软件界面背景为MediaElement并播放视频
在我们的常见的软件界面设计中我们经常会设置软件的背景为SolidColorBrush或者LinerColorBrush.RadialGradientBrush 等一系列的颜色画刷为背景,有时我们也会使 ...
- python数学第三天【方向导数】
1.方向导数 2. 梯度 3. 凸函数: 4. 凸函数的判定 5. 凸函数的一般表示 6. 凸性质的应用
- Python2基础
1.python 3.python函数 python的函数定义: 以def关键字定义一个函数: 参数放在小括号里面: 必须有return语句: 关键字参数: 即调用函数时传参顺序可以人为指定 默认参数 ...
- 【C/C++】实现龙贝格算法
1. 复化梯形法公式以及递推化 复化梯形法是一种有效改善求积公式精度的方法.将[a,b]区间n等分,步长h = (b-a)/n,分点xk = a + kh.复化求积公式就是将这n等分的每一个小区间进行 ...
- TP5.x——update更新成功但是返回是0
原因 更新的数据和表中的数据一致,这个官方文档上有说明的.所以大家使用这个语句的话需要注意 update 方法返回影响数据的条数,没修改任何数据返回 0 解决方法:我是进行了判断如何和数据库一致直接返 ...
- java 对象转JSON字符串 $ref 错误
顾名思义,这个是对象转Json时,发生的引用错误. 比较简单的方法是: 使用 帮助方法 https://www.cnblogs.com/hanjun0612/p/9779781.html Conver ...
- 【JSOI2008】火星人prefix 哈希 非旋转treap
题目大意 就是给你一个字符串,有三种操作,共\(m\)个 \(Q~x~y\):询问第\(x\)个后缀和第\(y\)个后缀的LCP \(R~x~y\):把第\(x\)个字符改成\(y\) \(I~x~y ...