第七章 函數表達式

關于引用類型的思考
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 指向正在執(zhí)行的函數指針,也就是指向digui2。所以在寫遞歸函數時,為了安全性,更推薦這種寫法。
但是最好的遞歸寫法是用函數聲明式
解決:
var digui=(function f(num){......return ...f(..)})

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容