基礎的JavaScript知識總結(十)閉包、立即執行函數
這次帶給大家基礎的JavaScript知識總結,總共有十一個知識點,基礎的JavaScript知識總結(十)閉包、立即執行函數下面就是實戰案例,一起來看一下。
//例子function a() { function b(){ var bbb = 234; console.log(aaa) } var aaa = 123; return b; }var glob = 100;var demo = a(); demo();
首先這個函數在執行return b之後,函數就a執行完了,會銷毀a的AO,,但是在銷毀之前函數b被保存出來了,所以b的執行期上下文並沒有被銷毀。
所以b的AO、Go都被保存出來了
這樣就形成了閉包,也可以這樣說:內部函數被保存到了外部,一定形成閉包
function a (){ var num = 100; function b(){ num ++; console.log(num); } return b; }var demo = a(); demo();//打印101demo();//打印102
閉包的概念: 當內部函數儲存到外部時,將會產生閉包。閉包會導致原有作用域鏈不釋放,造成記憶體洩漏(記憶體佔用)
記憶體洩漏: 舉個例子....一個杯子...你往裡面到的水越多,他的記憶體越少(同理,你記憶體佔的越多,他的記憶體越少)
閉包的作用
實作公有變數
函數累加器
可以做快取(儲存結構)
eater
可以實作封裝,屬性私有化
Person()
模組化開發,防止污染全域變數
1、累加器上述例子已經寫了
2、可以做快取(儲存結構)
function test(){ var num = 100; function a(){ num ++; console.log(num); }; function b(){ num --; console.log(num); }; return [a,b] }var myArr = test(); myArr[0]();//打印101myArr[1]();//打印100 function eater(){ var food = ""; var obj ={ eat : function(){ console.log("i am eating" + food) }, push : function (myFood){ food = myFood; } } return obj; }var eater1 = eater(); eater1.push('banana'); eater1.eat();//打印出 i am eating banana
上面的這個例子我在eater1.push('banana')之後就給了eater裡面的foot = "",變成了food = "banana"。我在執行eater1.eat()之後就變成了拿到food = "banana" ,他們操作的都是同一個閉包,所以打印出i am eating banana,這個foot就相當於一個隱式的存儲結構一樣,這個就是快取的應用
給自己買個坑,屬性私有化,在我寫完物件之後在解釋,模組化開發也一樣
#立即執行函數
此類函數沒有宣告,在一次執行後即釋放。適合做初始化工作。
function a(){ }function b(){ }
我定義兩個函數,這兩個函數除非等到我JavaScript執行完,否則這兩個函數永遠都不的釋放,永遠等待被執行,等待被執行就佔空間。
作用 : 針對初始化功能的函數
(function (aaa,bbb,ccc){ var a = 234; var b = 123; var c = a+b; console.log(c) return c}(1,2,3)) 执行完立即被销毁 // 怎么去接收他var num = (function (aaa,bbb,ccc){ var a = 234; var b = 123; var c = a+b; console.log(c) return c}(1,2,3)) 立即执行函数有两种写法 //第一种(function(){}());//w3c 建议第一种//第二种(function(){})(); 扩展 只有表达式才可以被执行符号执行 var test = function (){}()//也可以被执行+ function test(){}()//也可以被执行 以此类推- !号也可以function test(){ console.log(a+b+c+d)}(1,2,3,4)//不执行也不报错
相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!
相關閱讀:
基礎的JavaScript知識總結(九)作用域、作用域鏈精簡
以上是基礎的JavaScript知識總結(十)閉包、立即執行函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

人臉偵測辨識技術已經是一個比較成熟且應用廣泛的技術。而目前最廣泛的網路應用語言非JS莫屬,在Web前端實現人臉偵測辨識相比後端的人臉辨識有優勢也有弱勢。優點包括減少網路互動、即時識別,大大縮短了使用者等待時間,提高了使用者體驗;弱勢是:受到模型大小限制,其中準確率也有限。如何在web端使用js實現人臉偵測呢?為了實現Web端人臉識別,需要熟悉相關的程式語言和技術,如JavaScript、HTML、CSS、WebRTC等。同時也需要掌握相關的電腦視覺和人工智慧技術。值得注意的是,由於Web端的計

在C++中,閉包是能夠存取外部變數的lambda表達式。若要建立閉包,請擷取lambda表達式中的外部變數。閉包提供可重複使用性、資訊隱藏和延遲求值等優點。它們在事件處理程序等實際情況中很有用,其中即使外部變數被銷毀,閉包仍然可以存取它們。

閉包是一種巢狀函數,它能存取外層函數作用域的變量,優點包括資料封裝、狀態保持和靈活性。缺點包括記憶體消耗、效能影響和調試複雜性。此外,閉包還可以建立匿名函數,並將其作為回調或參數傳遞給其他函數。

C++Lambda表達式支援閉包,即保存函數作用域變數並供函數存取。語法為[capture-list](parameters)->return-type{function-body}。 capture-list定義要捕獲的變量,可以使用[=]按值捕獲所有局部變量,[&]按引用捕獲所有局部變量,或[variable1,variable2,...]捕獲特定變量。 Lambda表達式只能存取捕獲的變量,但無法修改原始值。

js和vue的關係:1、JS作為Web開發基石;2、Vue.js作為前端框架的崛起;3、JS與Vue的互補關係;4、JS與Vue的實踐應用。

函數指針和閉包對Go性能的影響如下:函數指針:稍慢於直接調用,但可提高可讀性和可復用性。閉包:通常更慢,但可封裝資料和行為。實戰案例:函數指標可最佳化排序演算法,閉包可建立事件處理程序,但會帶來效能損失。

Go語言函數閉包在單元測試中發揮著至關重要的作用:捕獲值:閉包可以存取外部作用域的變量,允許在巢狀函數中捕獲和重複使用測試參數。簡化測試程式碼:透過擷取值,閉包消除了對每個循環重複設定參數的需求,從而簡化了測試程式碼。提高可讀性:使用閉包可以組織測試邏輯,使測試程式碼更清晰、更易於閱讀。

是的,可以透過鍊式呼叫和閉包優化程式碼簡潔性和可讀性:鍊式呼叫可將函數呼叫連結為一個流暢介面。閉包可建立可重複使用程式碼區塊,並在函數外部存取變數。
