javascript高级与面向对象笔记总结!!
递归
递归就是函数自己直接或者间接的调用自己
递归的两个要素
- 自己调用自己
- 递归结束条件
化归思想
由难化易,由繁化简,的思想就是化归思想
前n项和
1 | fn(n) = fn(n-1) + n |
1 | function sum(n){ |
阶乘
1 | fn(n) = fn(n-1) * n |
1 | function sum(n){ |
斐波那契数列
1 | fn(n) = fn(n-1) + fn(n-2) |
1 | function fib(n){ |
递归获取指定元素的后代元素
1 | function getChildren(ele){ |
闭包
一个封闭的包裹结构
一个可以访问独立数据的函数
1 | function outer(){ |
获取和设置数据
1 | function outer(){ |
for循环注册点击事件的问题
1 |
|
for循环中使用setTimeout
1 | for( var i = 0; i < 10; i++){ |
缓存
- 硬件缓存
- 浏览器缓存
CDN
—Content Delivery Network
内容分发网络
使用缓存解决递归实现的斐波那契数列的性能问题
1 | function createFib(){ |
jQuery缓存实现分析
1 | function createCache(){ |
函数的四种调用模式
函数调用模式
形式: 函数名();this: window
方法调用模式
形式: 对象名.方法名();
this: 调用该方法的对象
构造函数调用模式
形式: new
.构造函数名()this: new
创建出来的对象
工厂模式
1 | function createObject(){ |
寄生模式
1 | function CObject(){ |
上下文调用模式
call
1 | 函数名.call(对象,参数1,参数2,参数3...) |
- 调用该函数
- 将函数内部的
this
赋值为call
的第一个参数 - 将第一个参数之后的所有参数,当做实参传递给函数
apply
1 | 函数名.apply(对象,数组) |
- 调用该函数
- 将函数内部的
this
赋值为apply
的第一个参数 - 将第二个参数的数组,依次拆解开,将每一个元素挨个传递给函数做为实参
伪数组转换成数组
1 | var arrFake = { |
求数组最大值
1 | var arr = [1,23,4,4,3,3,34,3,2]; |
借用构造函数继承
1 | function Father(){ |
沙箱模式
一个隔离的安全的环境
1 | (function(w){ |
为什么要将 window
作为参数传递
- 外面无法访问里面,里面也不要去访问外面的东西
- 在代码压缩的时候,内置的对象名称无法被压缩,如果使用自己的变量,是可以压缩的
forEach 和 map
1 | var arr = [1, 2, 3, 4, 5 ,6]; |
严格模式
1 |
- 变量不使用
var
声明会报错 - 不能删除不允许删除的属性
- 对象的属性不可以重名
- 函数的形参不可以重名
- 不允许使用八进制数据
事件兼容性处理
1 | function createRegister(){ |