JavaScript 中循环引用的示例


循环引用是指一个对象直接或间接地引用自身。它创建了一个闭环。与其他编程语言一样,javascript 也面临着循环引用的问题。在本文中,我们将介绍几个 javascript 中不同循环引用模式的示例。

直接循环引用

在直接循环引用中,对象使用自身指针指向自身。在这个例子中,我们可以无限地扩展 user 对象(实际上最多到一定限制),并且它们都指向同一个对象。让我们看看下面的代码和输出控制台结果,以便更好地理解。

示例

var user = { first_name: 'Suman' }; user.self = user; console.log("The user:", user); console.log("The user using self pointer:", user.self); console.log("The user using double self pointer:", user.self.self);

间接循环引用

这是前面案例的扩展。在这个例子中,user 被 details 对象的 user 属性所指向。这是间接引用,但 user 本身指向自身,因此这里也形成了一个循环状态。

示例

var user = { first_name: 'Suman' }; user.self = user var details = { user: user, user_id: 'u01' }; console.log(details);

类和对象类型

在本节中,有两个示例,一个使用类,另一个使用从函数创建的对象。在这两种情况下,都存在循环引用,我们可以通过对象的一系列自身指针来检查这一点。

示例(使用类)

class Person { constructor( name ) { this.name = name; this.self = this; } } var person = new Person( 'Asim' ); console.log( "Name of the person from multiple self pointers:", person.self.self.self.self.name );

示例(使用来自函数的对象)

function Person( name ) { this.name = name; this.self = this; } var person = new Person( 'Asim' ); console.log( "Name of the person from multiple self pointers:", person.self.self.self.self.name );

闭包

正在创建一个闭包对象,当给定参数时,它只是打印参数,否则通过传递错误消息来调用同一个对象。因此闭包正在工作。以下代码展示了这种现象。

示例

var myObject; myObject = function( arg ) { if ( arg ) console.log( arg ); else myObject( 'please provide an argument' ); } myObject( 'Any string or value' ); myObject();

结论

循环引用用于描述一个指向自身的对象。这种循环引用的不同类型可以是直接的或间接的。当一段代码需要另一段代码的输出,而被引用的代码又需要原始代码的输出时,这被称为循环引用,它可能发生在生产程序中。这可能导致应用程序无法使用,因为它们都不能提供任何相关数据,或者它可能引入微小、不易察觉的内存泄漏,这些内存泄漏有时会突然出现,尤其是在早期的 JavaScript 引擎中。

Arnab Chakraborty
Arnab Chakraborty

企业培训师

更新于: 2023年4月5日

1K+ 浏览量

启动您的 职业生涯

通过完成课程获得认证

开始学习
广告