首页 > 其他分享 >824笔记(闭包,递归,浅/深拷贝)

824笔记(闭包,递归,浅/深拷贝)

时间:2022-08-24 23:33:45浏览次数:82  
标签:闭包 obj 递归 console item var 824 拷贝 newobj

闭包

闭包:

有权访问另一个函数作用域中变量的函数,

一个作用域可以访问另外一个函数内部的局部变量

作用:延伸了变量的作用范围

特性:

变量或者参数不会被垃圾回收机制回收

函数套函数

内部函数可以直接访问外部函数的内部变量或者参数

优点:

变量长期驻扎在内存中

避免了全局变量污染

缺点:

常驻内存,增大了内存的使用量,使用不当会造成内存泄漏

递归

什么是递归

函数内部自己调用自己,该函数就是递归函数

必须有结束条件

拷贝

浅拷贝

// 浅拷贝 :只拷贝一层,更深层次对象级别的只拷贝引用
// 深拷贝   拷贝多层 每一级别的数据都会拷贝

var obj = {
    id:1,
    name:"andy",
    msg:{
        age:18
    }
}
var o ={}

// 第一种
// for(var k in obj){
//     // k 属性名  obj[k] 属性值
//     o[k] = obj[k]
// }
// console.log(o)
// o.msg.age =23
// console.log(obj)

// 第二种  合并对象Object.assign(target,source1,source2)
// target 目标对象  source1,source2 若干个源对象
// 实行的是浅拷贝

// var obj1 = {}
// var a ={a:1}
// var b={b:2}
// console.log(Object.assign(obj1,a,b))
// console.log(obj1)  //{a:1,b:2}

var obj1 = {a:{b:1}}
var obj2= Object.assign({},obj1)
obj1.a.b=3
console.log(obj2.a.b)

深拷贝

// 拷贝多层 每一级别的数据都会拷贝
var obj = {
    id:1,
    name:"andy",
    msg:{
        age:18
    },
    colors:['pink','red']
}
var o ={}

// 封装函数
function deepCopy(newobj,oldobj){
    for(var k in oldobj){
        // 判断我们的属性值属于那种数据类型
        var item=oldobj[k]
        // 判断这个值是否是数组
        if(item instanceof Array){
            newobj[k]=[]
            deepCopy(newobj[k],item)
        }else if(item instanceof Object){
            //判断是否为对象
             newobj[k]={}
             deepCopy(newobj[k],item)
        }else{
            // 属于简单数据类型
            newobj[k] = item
        }
    }
}


deepCopy(o,obj)
o.msg.age =89
console.log(obj,o)

标签:闭包,obj,递归,console,item,var,824,拷贝,newobj
From: https://www.cnblogs.com/mengxiaoye/p/16622683.html

相关文章

  • 闭包
    变量的作用域无非就是两种:全局变量和局部变量。var用来声明全局变量,函数内部可以直接读取全局变量。varn=999;functionf1(){alert(n);}f1();//999但用v......
  • Swift - 闭包
    闭包表达式{(参数列表)->返回值类型in函数体代码...}varsum={(v1:Int,v2:Int)->Intinreturnv1+v2}sum(10,20) 闭包表达......
  • 2022-8-22 剑指offer-优先队列-每日一题-二叉树-搜索/递归
    剑指OfferII060.出现频率最高的k个数字难度中等36收藏分享切换为英文接收动态反馈给定一个整数数组 nums 和一个整数 k ,请返回其中出现频率前 k 高的元......
  • Linux中的递归参数-r和-p
    Linux中的递归参数-r和-p常见递归有两种:一是从指定目录向上级目录递归。使用-p参数,意为parents,代表命令mkdir等二是从指定目录向其下级目录递归。使用-r参数,意为recurs......
  • 什么是闭包
    闭包就是可以读取其它函数内部的变量;函数嵌套,内层函数使用了外层函数的变量;闭包=内层函数+外层函数的变量;优点:函数可以操作函数内部的变量,延长变量的的作用范围,延长变......
  • 闭包和promise、宏任务、微任务
    闭包和promise闭包概述:闭包是一种书写代码一种结构,这种结构拥有的特性就是内部的空间在使用中不会被回收。(内部的变量以及对应的参数不会被gc回收)函数的预编译过程开......
  • 闭包和promise
    闭包概述:闭包是一种书写代码一种结构,这种结构拥有的特性就是内部的空间在使用中不会被回收。(内部的变量以及对应的参数不会被gc回收)函数的预编译过程开辟函数的内存空......
  • 闭包和promise
    闭包概述:闭包是一种书写代码一种结构,这种结构拥有的特性就是内部的空间在使用中不会被回收。(就是一个外部函数返回一个内部函数,返回的内部函数一直引用着外部函数的变量......
  • 闭包用于缓存
    闭包可用作缓存functioneater(){varfood='';varobj={eat:function(){console.log('iameating'+''+food);......
  • 7-17 汉诺塔的非递归实现
    借助堆栈以非递归(循环)方式求解汉诺塔的问题(n,a,b,c),即将N个盘子从起始柱(标记为“a”)通过借助柱(标记为“b”)移动到目标柱(标记为“c”),并保证每个移动符合汉诺塔问题的要求......