Javascript 循环引用的示例
循环引用是指一个对象直接或间接地引用自身,从而创建了一个闭环。像其他编程语言一样,javascript也面临着循环引用的问题。在本文中,我们将介绍javascript中不同循环引用模式的几个示例。
直接循环引用
在直接循环引用中,对象使用self指针指向自身。在这个示例中,我们可以无限扩展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);
间接循环引用
这是前一个案例的扩展。在此示例中,用户由details对象的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引擎中。