2017-10-13 173 views
1

看看這段代碼關閉循環參考?

var obj = { 
    foo: 5 
}; 

var recursive = (function(){ 
    if(this.foo === 0){ 
     return; 
    } 

    this.foo--; 
    recursive(); 
}).bind(obj); 

是否遞歸函數創建一個循環引用?如果或者沒有,爲什麼?

編輯:函數recursive與其自身之間的循環引用。我還發現類似的東西here

+0

「create」是什麼意思?您希望哪些實體成爲參考圖的一部分? – Bergi

+1

*「遞歸函數是否創建循環引用?」*在什麼和什麼之間? –

+0

函數'遞歸'和它本身之間。我編輯了這篇文章。 –

回答

2

遞歸函數定義是否創建循環引用,如this one here

是的,它仍然有。 bind不會改變這一點,儘管它在引用圈中引入了額外的鏈接。

  • 可變recursive保持綁定函數
  • 結合的功能(從.bind()調用創建)包含與原來的功能
  • 原始功能(從函數表達式創建)的狹槽閉合在所述可變包含的範圍recursive
+0

我如何重新設計它,避免循環引用? –

+3

@JuanDelaCruz你不能,你絕對不需要。 – Bergi

+0

爲了清楚起見,使用函數表達式是什麼使它循環正確?如果我要使用沒有綁定的函數定義:'function recursive(){recursive(); }'它不會是循環的? –