JSON对象的parse和stringify
JSON.stringify(obj)将任何类型转换为字符串类型
JSON.parse(_obj)将""去除,不能去除对象的
使用JSON.stringify(obj)和JSON.parse(_obj)深拷贝
<script>
function deepClone(obj){
let _obj = JSON.stringify(obj);
let objClone = JSON.parse(_obj);
return objClone
}
let a=[0,1,[2,3],4],
b=deepClone(a);
a[0]=1;
a[2][0]=1;
console.log(a,b);
</script>
使用递归深拷贝
<script>
function deepClone(ob j){
var objs = Array.isArray(obj)?[]:{};
if(obj&&typeof obj==="object"){
for(key in obj){
if(obj.hasOwnProperty(key)){
if(obj[key]&&typeof obj[key]==="object"){
objs[key] = deepClone(obj[key]);
}else{
objs[key] = obj[key];
}
}
}
}
return objs;
}
let a=[0,1,[2,3],4],
b=deepClone(a);
a[0]=1;
a[2][0]=1;
console.log(a,b);
</script>
闭包有3个特性
①函数嵌套函数
②函数内部可以引用函数外部的参数和变量
③参数和变量不会被垃圾回收机制回收
实例代码
<script>
function a(){
var name = "dov";
return function(){
return name;
}
}
console.log(a()());
var b = a();
console.log(b());
function fn(){
var num = 3;
return function(){
var n =0;
console.log(++n);
console.log(++num);
return function(){
fn()();
}
}
}
var fn1=fn()
fn1()();
</script>
Generator 函数
特性:
Generator 函数特性,可以通过 yield 关键字,
把函数的执行流挂起,为改变执行流程提供了可能
Generator 有两个区分于普通函数的部分:
1.一是在 function 后面,函数名之前有个 * ;
2.函数内部有 yield 表达式。
3.其中 * 用来表示函数为 Generator 函数,yield 用来定义函数内部的状态。
next()调用
一般情况下,next 方法不传入参数的时候,yield 表达式的返回值是 undefined 。
当 next 传入参数的时候,该参数会作为上一步yield的返回值。
done表示函数是否执行完,true执行完,否则false
value获取的是yield后面的值
return 方法
return 方法返回给定值,并结束遍历 Generator 函数。
return 方法提供参数时,返回该参数;不提供参数时,返回 undefined