函数
3.严格模式
(1)什么是严格模式
(2)开启严格模式
(3)严格模式中的变化
4.高阶函数
5.闭包
(1)变量作用域
(2)什么是闭包
<script>
function fn() {
var num = 10;
function fun() {
console.log(num);
}
fun();
}
fn();
//fn()函数可以使用另一个函数fun()中的变量num,此时就产生了闭包
</script>
(3)闭包的作用
延伸了变量的作用范围
<script>
function fn() {
var num = 10;
function fun() {
console.log(num);
}
return fun;
}
var f = fn(); //f中存的是fun函数
f(); //调用f就相当于调用fun函数,即fun(),此时会访问fn()中的num
//在全局作用域中访问了局部作用域中的变量,延伸了该变量的作用范围
</script>
6.递归
(1)什么是递归
(2)递归的应用
<script>
var data = [{
id: 1,
name: '家电',
goods:[{
id: 11,
gname: '冰箱',
goods: [{
id: 111,
gname: '海尔'
}, {
id: 112,
gname: '美的'
}]
}, {
id: 12,
gname: '洗衣机'
}]
}, {
id: 2,
name: '服饰'
}];
//利用forEach遍历里面的每一个对象
//利用递归查找里面的元素
function getID(json, id) {
var o = {};
json.forEach(function(item) {
if (item.id == id) {
o = item;
} else if(item.goods && item.goods.length > 0) {
o = getID(item.goods, id);
}
})
return o;
}
console.log(getID(data, 1));
console.log(getID(data, 12));
console.log(getID(data, 112));
</script>
(3)深拷贝和浅拷贝
<script>
var obj = {
id: 1,
name: 'andy',
msg: {
age: 18
}
};
var o = {};
//浅拷贝只是拷贝地址,拷贝后的对象和原有对象指向的是相同的数据,
//修改其中的任意一个数据,原对象和拷贝后的对象都会被修改
//for循环实现浅拷贝
for (var k in obj) {
//k是属性名 obj[k]是属性值
o[k] = obj[k];
}
console.log(o);
//o.msg.age = 20;
//console.log(o);
//Object.assign()实现浅拷贝
Object.assign(o, obj);
console.log(o);
//深拷贝
var deep = {};
function deepCopy(newobj, oldobj) {
for (var k in oldobj) {
var item = oldobj[k];
//判断这个值是否是数组
if (item instanceof Array) {
newobj[k] = [];
deepCopy(newobj, item);
} else if(item instanceof Object) {
//判断这个值是否是对象
newobj[k] = {};
deepCopy(newobj[k], item);
} else {
//属于简单数据类型
newobj[k] = item;
}
}
}
deepCopy(deep, obj);
console.log(deep);
</script>