Javascript 中的循环引用示例

javascriptweb developmentfront end technology

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

直接循环引用

在直接循环引用中,对象使用自指针指向自身。在此示例中,我们可以无限扩展用户对象(实际上达到一定限制),并且所有对象都指向同一个对象。让我们查看以下代码和输出控制台结果以更好地理解。

示例

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);

间接循环引用

这是前一种情况的扩展。在此示例中,用户由详细信息对象的用户属性指向。这是间接引用,但用户本身指向自身,因此这里也形成了一个循环状态。

示例

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 引擎中。


相关文章