第七章 函数表达式

关于引用类型的思考
var obj={
        a:1
    }
    var obj2=obj
    obj.b=4
    console.log(obj2)
    obj=null
    console.log(obj2)

输出结果

image.png

总结
引用类型虽然说是通过地址访问,改变原引用类型对象也会同步改变被赋值对象。但是,当原引用类型对象被置空的时候(或置其他值:1,"abc",{a:2},true....),变量整体重新赋值,相当于重新开辟了一块内存。内存指针变了。和原来无关了。被赋值对象依然和原引用类型旧值相同。
更进一步
函数定递归

 function digui(num){
        if(num == 1)
            return 1;
        else
            return  num*digui(num-1)
        
    }
    var digui2 = digui
    digui = null
    digui2(4)

函数digui 被赋NULL ,就如同上述,开辟了新的内存空间。但是,递归调用时return 出 依然引用的是digui(这时候已经是NULL了)。会报出digui is not a function的error。
解决:改成return num*arguments.callee(num-1)
arguments.callees 指向正在执行的函数指针,也就是指向digui2。所以在写递归函数时,为了安全性,更推荐这种写法。
但是最好的递归写法是用函数声明式
解决:
var digui=(function f(num){......return ...f(..)})

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容