闭包等等...

bind cal1 apply区别

1.相同点:都是【函数对象】中属性,改变函数中this指向
2.不同点:(1)bind 方法 返回别被改变this 的 函数,手动执行函数(bind 的返回值)
(2)call() apply() 无返回值,自动触发函数
(3)call() apply 区别: apply 有两个参数,参二是数组: call有N个参数
3.call和apply除第一个参数以外,其他参数都是给 左边函数 传的 实参
4.语法 method.apply() method.call() method.bind()()

闭包

闭包是:函数返回值为定义的函数
闭包优点:外部函数可以访问函数体内的变量,
保证变量不会受全局变量的污染

闭包缺点:函数执行后;变量不会释放,容易导致内存泄漏

变量释放:每次执行函数时候,变量都为初始化状态
变量没释放:具有【存值】作用:可以实现累加效果

内存

内存:栈内存;和 堆内存;
  • 1:只要声明一个变量;就会在【栈】中占一个内存
  • 2; 基本类型的的VAR 在栈中;直接提供在变量上
  • 3:引用类型的数值;数据存在堆中;同时提供给栈一个【地址】;指向堆中的数据
  • 4:堆中有多个数据;就有多个【地址】
  • 5: 栈中的变量;如果多个变量指向【同一个地址】,获取到的是【同一个堆内存中数据】
    任何一个变量发生变化都会影响到【其它的变量。
拷贝
  • 深拷贝:抄袭者;当抄袭者者数据改变时;不会改变被抄袭者中的内容同时,当被被抄袭中中数据发生改变时;也不会影响到抄袭者中数据。说明抄袭者可以自食其力
  • 浅拷贝 拷贝后;抄袭者和被抄袭者相互影响
深拷贝引用类型数据

数据:定义新的数组或者对象;将被拷贝的数据;遍历;添加到新数组中

深拷贝方法封装
   // 深拷贝数据组方法
        function deepArr(arr) {
            var arrCopy = []
            for (var i = 0, len = arr.length; i < len; i++) {
                arrCopy.push(arr[i])
            }
            return arrCopy;
        }

        // 深拷贝对象
        function deepObject(obj) {
            var objCopy = {};
            for (x in obj) {
                objCopy[x] = obj[x];
            }
            return objCopy;
        }
        // 深拷贝引用类型数据
        function deepData(data) {
            if (data.constructor.name === 'Array') { // 为数组
                var arrCopy = []
                for (var i = 0, len = data.length; i < len; i++) {
                    arrCopy.push(data[i])
                }
                return arrCopy;
            } else { // 为对象
                var objCopy = {};
                for (x in data) {
                    objCopy[x] = data[x];
                }
                return objCopy;
            }
        }

递归

递归函数;是函数中的循环;通过反复调用【自身的方法】;来返回一个结果
优点,代码简单;更符合人的思考;不符合运算逻辑
缺点;运算量大,最先执行的程序;最后输出结果。

学习方式

1:找规律 2:找出口

递归实现深拷贝
// 方法的作用;实现多层复杂的数据类型的深拷贝
        function deepCopy(data) {
            if (data.constructor.name === 'Array') { // 为数组
                var arrCopy = []
                for (var i = 0, len = data.length; i < len; i++) {
                    // arr[i]
                    if (data[i] instanceof Object) {// arrary object null
                        arrCopy.push(deepCopy(data[i]))
                    } else { // 基本类型
                        arrCopy.push(data[i])
                    }
                }
                return arrCopy;
            } else { // 为对象
                var objCopy = {};
                for (x in data) {
                    if(data[x] instanceof Object){
                        objCopy[x] = deepCopy(data[x])
                    }else{ // 基本类型
                        objCopy[x] = data[x];
                    }
                }
                return objCopy;
            }

        }

面向对象

PPT

原型 继承

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值