12/2/2016 8:26:16 AM
- 递归画图、不好跟断点
- 闭包、变量常驻内存
- 闭包原理
- 词法
- 内可访问外
- 返回一个内部函数带着变量
- for循环中注册点击事件
- 给div添加自定义属性
- 缺点—-所有人都可以修改
- 给闭包
- 只能自己访问—-只能自己修改
- 给div添加自定义属性
- for循环中setTimeout
- 等所有的主逻辑执行完成之后,才去执行setTimeout里面的—-最后还是全局的i
- 使用闭包处理,每次存自己的j
- 斐波那契
- 存在的问题
- 里面存在大量的重复计算
- 解决办法
- 先定义一个数组
- var arr = [];
- function fib(){}
- 当要获取斐波那契数字的时候,先数组中去拿
- 如果有,直接返回
- 如果没有,就去计算(递归计算的逻辑)
- 将计算出来的值,存入数组,一遍喜爱使用
- 将计算出来的值返回
- 先定义一个数组
- 存在的问题
缓存cache
- 缓存处理
- 就是将数据进行临时的存储,以提高访问效率
- 浏览器缓存
- 一般情况下,会将一些不经常变化的静态资源,在浏览端进行存储,用户在首次请求的时候,会去服务器进行请求,完毕之后,在浏览器中进行存储
- 用户在下次访问的时候,就不会再去服务器进行请求资源了,而是直接从缓存中进行加载,这样就会极大的提升页面加载的速度
- 如何优化网页的访问速度(网站访问速度优化措施)
- 使用缓存
- js css 进行压缩
- 图片压缩
- 精灵图(减少对服务器的请求次数)
- cdn—content delivery network 内容分发网络—也是缓存的一种
- 免费的资源jq 和 bootstrap等,直接使用
- 海南,北京
- 百度的时候,在海南先去访问北京,进行存到海南的,下次的时候进行去海南的
- 硬件缓存
- 计算机中的内存,也是缓存的一种
- cpu 、一级缓存/二级缓存…
- 缓存型数据库
- 硬盘型数据库(关系型数据库)
- MSSQL MYSQL Oracle
- 稳定、安全
- 内存型数据库()非关系型
- Redis MongoDB
- 用在高并发网站
- 内存断电丢失
- 硬盘型数据库(关系型数据库)
- 懒加载….
- jq插件 12/2/2016 9:44:19 AM
- jq缓存实现分析
- 数组做缓存
- 数组的键
- 对象
- 对象做缓存,键更灵活,可以使用自定义的字符串(就有了意义)
- 数组做缓存
- 选择器需要用到缓存
- 类型缓存
- 动画缓存
- 封装一个缓存容器出来
- 行为
- 获取值的行为
- 设置值的行为
- 有个
- 主意
- 对象没有length属性,所以判断对象中存储了多少个数据,无从下手
- 缓存,一半要有数量的限制
- 超出这个限制之后,新的数据坑定要存进去
- 但是最早添加的进去的数据,要被删掉
- keyList
- 由于对象没有length属性,数组有
- 对象中添加数据,先后顺序,无法确定,但是数据有先后顺序
- 使用数组和这个对象配合起来,做长度限制这个事件
- 每当队形中存入一个键值对的时候
- 就给数组中存入这个简,对象中的兼职对就和数组中的键一一对应
- 数组中兼的顺序,就能标识对象中的兼职对应的顺序了
- 做判断
- 如果超出了长度限制,就要把对象中的兼职对删掉
- delete cache[]
- 在电脑内存可以的范围内 12/2/2016 10:29:58 AM
- 行为
问题
- hash
jq源码分析
- 设置可以直接通过函数当成一个对象进行存储—这个
- 加个空格,默认加的,免得和源冲突
- cache
- 长度限度
- 新增一个数组,协同工作
- 用数组,新增数据的时候,加一个key;和对象一一对应
- 限制可以限制的条件,数组的长度
- 优化后的代码
- get和set合并一个方法
- return function
- jq源码
- 没有用了存储的对象,使用函数来当对象
- 加一个空格,处理好源码的冲突
- 设置数据
- 获取数据,操作对象的方式去操作的
这个的用处
- 将斐波那契数组的缓存替换成刚才封装的
- 作用
- 获取
- 设置
- 将分析好的缓存应用在斐波那契数列
- 作用
- 创建一个缓存相当于arr的作用
- 之前是arr只能存0 1 2 下标
- 现在缓存容器还可以使用无序的键值对
- 作用
- 例子
- 获取元素
- 写框架
- 获取元素
- 解决斐波那契性能问题
- 递归
- 闭包
- 缓存
- 将一个点扯出一个知识体系
自调用函数
- 概念
- 立即执行函数表达式IIFE imediatly invoked function expression
- 代码
(function(){})()
;- 左边的加括号了,就是函数表达式
- 代码
- 语句和表达式的区别
- ;
- = 右边
- 语句和表达式的区别
- 概念
- 函数声明
- function func(){}
- 函数表达式
- var num = function(){};
- 小技巧
-
- function(){}();//做了解
12/2/2016 11:34:38 AM
12/2/2016 2:25:08 PM
复习
- function(){}();//做了解
12/2/2016 11:34:38 AM
12/2/2016 2:25:08 PM
-
- cdn
- 用户第一次进行去真的服务器访问 存到离自己近的服务器
- 后面直接到最近的服务器进行访问
- cache作用
- 使用范围
- 写框架
- 写组件的时候
- 使用范围
- 自调用(立即执行)
- 让系统认为是一个函数表达式可以进行调用
沙箱模式
- 沙盘
- 显示生活中的沙盘是用来模拟显示世界
- 360沙箱模式
- 创建一个和外界隔离的,封闭的环境,如果程序有问题,那么这个不正常的东西不会影响外界外界
- 软件
- cydia 应用市场
- ios中的
- JS
- 创建一个隔离的安全的环境 5. 1。 保证洒向内部所有内容的安全性,不被外界访问到
- 用处
- 在写框架,写组件的时候,都会使用沙箱模式
- sublime
- format插件
- jq
- 直接写在(function(){})()匿名函数
- 结果
- 声明所有需要的变量
- 主要的逻辑代码
- 如果需要给外界就通过window对象暴露接口
- window.jq = window.$ = Jquery
- 在进行代码压缩(删除不必要的空格,换行,将变量名替换为单个字母的形式)的时候
- 由于内置对象是系统自带的,所以这些内置对象的名称不可能被压缩—window不能被压缩
- (function(window){var window = window;})(window)
- 自己通过实参进行给形参,这样就可以实现功能,也可以被压缩了
为什么要把window通过实参给沙箱
-
解释一
- 由于内置对象是系统自带的,所以这些内置对象的名称不可能被压缩—window不能被压缩
- (function(window){var window = window;})(window)
- 自己通过实参进行给形参,这样就可以实现功能,也可以被压缩了
- (function(window){var window = window;})(window)
- 由于内置对象是系统自带的,所以这些内置对象的名称不可能被压缩—window不能被压缩
- 第二个解释
- 实现给的目的,外面不能访问里面的,里面的也不要去访问外面的!!!
- puzzle
- 用处
- 框架
- 组件
- layer.layui.com
- sentsin
- www.yinwang.org
函数的四种调用模式
- 模式
- 函数调用模式
- 语法: 函数名()
- function test(){}
- test()
- 函数调用模式中,this指向window对象
- 方法调用模式
- 语法
- 对象.方法()
- var obj = {sayH:function(){}}
- obj.sayHello()
- 特点
- 方法调用模式中的this指向调用该方法的对象
- 语法
- 构造函数调用
- 语法
- new 函数名()
- function Person(){}
- 特点
- 构造函数中的this指向new关键字创建的对象(这样说)
- 语法
- 上下文调用模式
- 函数调用模式
2.创建对象的模式 1. 工厂模式 1. factory 2. 代码结构
function factory(name,age){
}
- 构造函数
- 构造函数调用模式
- this指向new创建出来的对象
- 寄生模式
- 语法
- 代码结构
- 调用模式:构造函数调用模式
- 作用—–是干嘛的
上下文调用模式
- 左值和右值
- lva rvalue
- lva
- 左值
- 右值
- 在js中哪些不可以做左值
- func()
- this
- 常量
- 左值
- 可以卸载等号左边,可以被赋值的值,就是左值
- 右值
- 可以用来为其他变量赋值的值,就是右值
- lva rvalue
- 特点
- 在前三种调用模式中,this的值都是固定的,不可以修改的!!!
- 但是在上下文调用模式中,this是可以被修改的
- 上下文调用模式
- 上下文:
- 指的就是函数的调用环境(this的指向)
- 能够更改上下文的调用模式
- 上下文:
- 两种方式
- call
- 语法
- 函数名.call(对象,arg1,arg2,argn)
- 功能
- 调用该函数
- 将函数内部的this指向第一个参数传过来的对象
- 将第二个以及后面的参数,作为实参传递给要调用的这个函数
- 代码结构
- 用法
- 语法
- call
- apply
- 语法
- 函数名.apply(对象,数组)
- 功能
- 调用该函数
- 将this指向第一个参数
- 将第二个参数的数组,成一个一个的元素,一次作为函数的实参 — 面试
- 实例 function test(a,b,c){}
- 语法
- call和apply的不同点
- 传递参数的方式不同
- call
- 把每个实参都指定了
- apply
- 使用了数组
- call
- 使用环境
- call 是使用在参数个数确定的情况!!!
- apply 是使用在参数个数不确定的情况下!!!
- 传递参数的方式不同
- 注意事项
- call和apply的第一个参数如果为null或者undefiend,那么this指向window
- test.call(null,1,2,3)
- test.call(undefiend,1,2,3)
- call和apply的第一个参数如果为值类型的数据,那么会将这个值类型的数据,转换成对应的引用类型的数据,然后再将this指向这个引用类型的数据
- call和apply的第一个参数如果为null或者undefiend,那么this指向window
- ….
- —讲这个—是为了解释 函数调用的几种方式
ca所有的ll和apply的引用场景
- 让用户在页面上为call方法设置参数
- 获取文本框
- 把所有参数用逗号隔开
- 直接转换成数组
- 使用apply
上下文调用模式的练习
- 伪数组
- 具有数组的特点,也可以遍历,但是不能使用数组的方法
- 如何将一个伪数组转换成一个真数组
- 求数组中的最大值
- Math.max()
- 不能传数组
- apply
- 实际应用
- Math.max.apply(null,arr)
- Math.max中的计算逻辑并没有用到this指针
- 相当于如下的代码
- Math.max([arr[0]…..arr[length-1]])
- 工作中可以用
借用构造函数继承
- Math.max.apply(null,arr)
- Math.max()
- 混入式
- 原型
- 经典继承
- 借用构造函数继承
- 每次新创建的时候都是新开辟的空间
- 所以不影响
12/2/2016 7:15:47 PM
复习
js第六天
- 缓存
- cache
- 将数据进行临时的存储,以提高访问效率
- jq的缓存实现分析 12/2/2016 7:36:05 PM 12/2/2016 8:16:03 PM
- js decodeURI
- encode 转换
- 参数
http://www.mmm.com?cate 前端路由——
问题
- ajax里面代码太多
- 解决
- 将succes进行封装,分别调用 12/2/2016 7:37:59 PM
- 解决
hasownpropoty