JSON对象,递归深拷贝的方式,闭包和Generator 函数

本文详细介绍了JavaScript中JSON.stringify和JSON.parse的基本用法,探讨了深拷贝的实现,包括递归方式,以及闭包的三个特性。同时,通过实例讲解了Generator函数及其yield关键字的使用和控制执行流程的方法。
摘要由CSDN通过智能技术生成

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

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值