js高级 深拷贝 浅拷贝

本文详细介绍了如何避免全局变量冲突,自调用函数的概念,递归函数的工作原理,浅拷贝与深拷贝的区别,以及函数的不同调用模式。同时探讨了异步代码中可能出现的数据丢失问题及其解决方案。
摘要由CSDN通过智能技术生成

目录

01 如何避免全局变量

02 递归函数

03 浅拷贝

04 深拷贝

05 函数的调用模式

06 异步代码数据丢失问题


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值