闭包优化缓存解决递归实现的斐波那契数列存在的性能问题
1 | function createFib(){ |
jQuery缓存实现
1 | function createCache(){ |
jQuery缓存源码分析
1 | function createCache(){ |
沙箱模式
一个封闭的隔离的环境!
在JS中通过函数来创建沙箱
1 | (function(window){ |
将window对象作为参数的目的
- 便于代码压缩
- 实现逻辑上的隔离,外部不访问里面的东西,里面也不访问外面的东西
沙箱的应用
- 框架
- 组件
- 插件
函数的调用模式
函数调用模式
函数名();
this —> window
方法调用模式
对象.方法名();
this —> 调用该方法的对象
构造函数调用模式
new 函数名();
this —> new创建出来的实例
上下文调用模式
两种创建对象的方式
工厂模式
1 | function createObj(name, age){ |
寄生模式
1 | function Person(name, age){ |
工厂模式和寄生模式都可以用来创建对象,但是调用模式不一样,工厂模式是函数调用模式,寄生模式是构造函数调用模式!
上下文调用模式
call
1 | 函数名.call(obj, arg1...argN); |
apply
1 | 函数名.apply(obj, 数组or伪数组); |
注意事项
- 如果call和apply的第一个参数为null或者undefined,this将会指向window
- 如果call和apply的第一个参数为值类型的数据,会将值类型的数据转换成其对应的引用类型的数据,this指向该引用类型的数据
tips: 一般情况下apply的传参特性会被使用的居多(转换伪数组为真数组,求最大值)
forEach和map的使用
都可以用来遍历数组
forEach
1 | 数组.forEach(function(value, index, arr){}) |
map
1 | 数组.map(function(value, index, arr){}) |
map是有返回值的,他的返回值是,将每次调用回调函数之后的返回值拼接成一个新的数组,将这个数组返回,作为map的返回值!