目录
01 如何避免全局变量
自调用函数 常用于避免全局变量冲突的问题
不同的函数都有一个独立的作用域 所以可以解决命名冲突的问题
自调用函数也叫做沙箱函数
自调用函数的返回值 可以设置但是几乎不用
自调用函数可以传递参数 实参写在调用的括号里 形参写在function后面的括号里
沙箱函数不需要函数名称
对于自调用函数来说 不加分号可能会报错
所以在自己的自调用函数前面加分号 分号再多也不会出现问题 就是结束的意思
02 递归函数
递归: 层层递进 逐步回归
递归函数 函数的表现形式
函数自己调用自己(递进过程)
return 结束当前函数(回归过程)
03 浅拷贝
只能拷贝第一层 如果第一层是基本数据类型可以使用浅拷贝
如果第一层包含了复杂数据类型 复杂数据类型的赋值是引用地址的关系 会互相影响
04 深拷贝
递归深拷贝: 利用递归函数将obj1的所有成员都拷贝给obj2
05 函数的调用模式
函数模式: 函数名()
方法模式: 对象.函数名()
构造函数模式: new构造函数名()
使用call或者applay调用:
函数名.call(函数内部this指向的新对象,实参1,实参2...)
函数名.applay(函数内部this指向心对象,[实参1,实参2.....])
call和applay第一个参数传入null或者undefined表示不改变内部的this指向
06 异步代码数据丢失问题
for(var i=0;i<10;i++){
setTimeout(function(){
console.log(i);
},0)
}
for循环是同步任务 是非耗时任务 所以页面加载时就直接执行了
但是里面的定时器是耗时任务 是异步任务 不会在页面加载的时候执行
而是被推给了宿主环境(浏览器)去执行
等到定时器时间到了以后 此时页面早就加载完毕了 再去执行定时器的代码的时候
打印i变量时 因为i变量是全局变量 页面加载完毕之后i就变成了10
所以10个定时器用的是同一个i此时变成了10个10