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 引擎中。
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP