闭包:
1、内嵌函数(访问到自由变量)
2、依赖作用域链的运行机制
3、自由变量永久保存在内存中
自由变量
使用场景:
1、访问函数内部的变量
2、对象的私有属性
3、循环取值
4、函数 方法封装 参数注入
5、事件防抖
bug:频繁、重复的触发事件。
下拉加载:window.onscroll = function(){
}
优点:
2、私有的对象属性
缺点:
1、内存损耗过大
2、内存泄漏
垃圾回收机制:
gc机制
js异常:
常见的异常:
rangeError:
抛出、捕获异常:
Error():构造函数
throw obj
var obj = new Error();
try{
}catch(msg){
}
this 关键字:当前对象
this 直接无法使用?
this 的指向以【最终】驱动的对象为主。obj.fn()
自定义函数中: this--------> window
构造函数: this-------->当前实例对象
dom事件函数 this-------->当前节点对象
普通对象、json对象 this-------->当前对象
定时器函数(function(),100) this---->window
指向:
改变是指向:
1、变量替换
2、箭头函数
基于函数(function)调用:
function.call(obj,args,args2...) 即时调用函数,基于继承,参数都是单个变量
function.apply(obj,[args,args2...]) 即时调用函数,基于深拷贝,参数都是数组
function.bind(obj,arg1,arg2...) 非即时调用,基于深拷贝,参数都是单个变量
构造函数:?
function:构造函数
# 自定义函数
function hello(){
}
hello();
# 构造函数:构造对象
function Person(){
}
var obj = new Person()
系统内置:
Array() ----> [] new Array()
Object()----> {} new Object()
String() 包装类 ----> var str = "asdfghj" length split() new String("sdfsdf")
Number() 包装类
Boolean() 包装类
set()
....
包装类:将一些普通数据类型转换为对应数据类型
var str = new String(err)
字符串转数字:
"123abc"
pasreInt()
parseFlost()
var num = new Number(str)