首頁 >web前端 >js教程 >《瑞克和莫蒂》和《Clossures》:這些東西有什麼共通點?

《瑞克和莫蒂》和《Clossures》:這些東西有什麼共通點?

Susan Sarandon
Susan Sarandon原創
2024-10-24 06:36:02770瀏覽

Rick and Morty e Clorsures: o que essas coisas tem em comum?

那麼,你好嗎?我希望如此!

我試圖在 Leetcode 中解決一些程式設計問題,在其中一個挑戰中,我遇到了一個很多人都難以理解的程式設計中非常重要的概念。

所以我決定在這裡寫下嘗試以最好的方式解釋閉包如何在JavaScript中工作。跟我來吧!

問題

我正在研究一個名為“Counter”的挑戰,其中我需要創建一個計數器函數,該函數最初返回整數 n,並且在每次後續調用時返回比前一個值多 1 個單位的值。例如:

  • counter(10) 回傳 10
  • counter()(再次呼叫)回傳 11
  • counter()(再次呼叫)回傳 12

這個問題給了一些提示,包括我們可以使用傳回其他函數的函數。

這是閉包的概念。於是我就照著提示走了這條路。這是我想出來的解決方案:

var createCounter = function (n) {
    let contador = n;
    return function () {
        resultado = contador;
        contador++
        return resultado;
    };
};

這段程式碼定義了一個名為 createCounter 的函數,它傳回另一個函數(閉包),能夠儲存和操作局部變數(在本例中為計數器)。

  • 計數器從呼叫 createCounter() 時傳遞的 n 值開始。
  • 每次執行函數時,內部(返回)函數都會存取當前計數器值,傳回它,然後遞增它。
  • 由於關閉,這使得計數器能夠「記住」它離開的位置。

最後一步是我們體認到閉包真正威力的地方。閉包是指一個函數傳回另一個函數,該函數可以存取外部變數並且在呼叫之間保持其狀態。這就像我的函數中有一個小“隱藏”,我可以在其中存儲資訊並稍後訪問它。

瑞克和莫蒂在這個故事中扮演什麼角色?

《瑞克和莫蒂》系列遊戲涉及跨維度旅行、其他文明,對人類的諸多生存問題進行批判和提出思考。

如果你不了解該系列,這裡有一個簡短的摘要:作品的主角瑞克·桑切斯是一位開發各種瘋狂技術的科學家,通常帶著他的孫子莫蒂去冒險。這位老人最著名的發明之一是跨維度門戶,它使他能夠在現實和維度之間旅行。要了解更多信息,您必須觀看該系列(笑)。

你在說什麼,尼爾頓?

好吧,想像一下瑞克為莫蒂開發了一個跨維度背包,它可以訪問特定的維度。在這個維度中,瑞克放置了一些重要的工具。莫蒂可以帶著背包去任何地方——無論是去學校、散步,甚至是星際旅行——而且,即使遠離瑞克,他仍然可以訪問那裡存儲的所有東西。

最好的部分?莫蒂可以在任何時候想要使用甚至修改裡面的東西時打開背包並取出工具。而且無論儲存在何處,儲存的內容仍然可以存取。

這個例子是如何與閉包連結起來的?

  • Rick 是外部函數,它創建範圍(維度)和稍後可以訪問的變數(工具)。
  • 背著背包的Morty代表內部函數,可以存取和修改外部函數的變數
  • 維度代表外部函數的詞法範圍,即在外部函數內創建並由內部函數訪問的變量,即使在外部函數執行之後也是如此。
  • Morty 可以從任何地方存取維度中的事物這一事實反映了作用域持久性:即使在外部函數完成後,內部函數仍保持對原始作用域中變數的存取。

閉包是程式設計中強大的資源。在使用閉包的主要優點中,我強調封裝和記憶。封裝是因為只能透過閉包(內部函數)存取該值;而記憶化是因為能夠在呼叫之間保留變數的值。


人工智慧產生的圖片:https://designer.microsoft.com/image-creator?scenario=texttoimage

提示:產生一張圖像,其中《瑞克和莫蒂》中的瑞克正在遞給莫蒂一個發光的維度袖珍設備。莫蒂正在從口袋裡掏出工具和小玩意之類的東西,而瑞克在實驗室裡漫不經心地解釋著它的原理。口袋代表一個閉合裝置,其中包含莫蒂可以繼續訪問的浮動物品,即使在瑞克離開後也是如此。


結論

那麼,您了解什麼是閉包以及它們在程式設計中的重要性嗎?有時我希望我有一個像莫蒂那樣的背包來存放有用的東西或只是傳送到另一個維度(笑)。

如果您喜歡內容,評論並分享,就去吧!如果您認為這篇文章對其他人有幫助,請給我力量。

下次再見!

以上是《瑞克和莫蒂》和《Clossures》:這些東西有什麼共通點?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn