Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
引用自身的Javascript对象。。。有什么问题吗?_Javascript - Fatal编程技术网

引用自身的Javascript对象。。。有什么问题吗?

引用自身的Javascript对象。。。有什么问题吗?,javascript,Javascript,由于Javascript允许通过引用来分配复合值,因此如果Javascript对象引用自身,它将创建一组无限的引用,如控制台中所示: 这看起来像某种无限循环,但Chrome似乎没有问题。这样做是否存在内存问题或其他风险?就内存而言,没有问题。物体只是说它在哪里。这取决于您是否一次又一次地询问它。只有在“不知道如何正确终止递归对象图”的上下文中使用时,才会导致堆栈溢出错误或“无限递归”。这样一个对象将“中断”的一个地方是使用JSON.stringify(特别是,当它检测递归对象图时会抛出一个错误

由于Javascript允许通过引用来分配复合值,因此如果Javascript对象引用自身,它将创建一组无限的引用,如控制台中所示:


这看起来像某种无限循环,但Chrome似乎没有问题。这样做是否存在内存问题或其他风险?

就内存而言,没有问题。物体只是说它在哪里。这取决于您是否一次又一次地询问它。

只有在“不知道如何正确终止递归对象图”的上下文中使用时,才会导致堆栈溢出错误或“无限递归”。这样一个对象将“中断”的一个地方是使用
JSON.stringify
(特别是,当它检测递归对象图时会抛出一个错误)。注意Chrome控制台在检测到cycle.oth时是如何在
{pointers:Array(1)}
的“引用”中添加的。从防御性编程/程序员的角度来看,可以认为这样一个对象“仅”应该在这样一种情况下使用,因为这种情况可以保证只能以循环感知的方式进行遍历。感谢您的快速响应。非常有用。循环引用在IE6中是个问题,因为它。还没死呢。今天的浏览器?一点问题也没有。@user2864740:“注意Chrome控制台在检测到循环时是如何在{pointers:Array(1)}”引用中添加的。”这与此无关;Chrome以相同的方式表示非循环数组属性。与
{指针:[1]}
比较。