2017-10-13 175 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(); }'它不会是循环的? –