JS-[IIFE閉包]

?

JS-IIFE&閉包

  • IIFE(立即調用函數表達式)
    • 示例
    • IIFE實現單例模式
  • 閉包
    • 計數器例子
      • 非閉包實現
      • 閉包實現
      • IIFE閉包實現
    • 內存泄露解決

?

IIFE(立即調用函數表達式)

示例

(function iife(){	//直接執行,無需調用console.log("hello");
})();	//上面相當于function iife(){console.log("hello");
}
iife();

注意:為了規范,IIFE的函數名雖無意義,但最好加上

IIFE實現單例模式

var sun=(function(){console.log("sun create...");	//在聲明還未調用時就被直接執行var name="sun";var size=1599;function say(){console.log(name+" "+size);}return{		//返回可供調用的方法或參數say:say,name:name	//返回的name只是一個形參}
})();
sun.say();

IIFE的作用:隔離作用域,防止污染全局命名空間

閉包

計數器例子

非閉包實現

var count=0;
function add(){count++;console.log(count);
}
add();
add();	//輸出2

上面的計數器缺點是count是全局的,不具有安全性,易被誤操作。用閉包就可以解決這個問題

閉包實現

function counter(){var count=0;	//函數內部定義,不影響全局function add(){count++;console.log(count);}return{add:add};
}
var counter1=new counter();
counter1.add();
counter1.add();	//輸出2

IIFE閉包實現

(function counter(){var count=0;function add(){count++;console.log(count);}window.counter={	//直接把計時器賦給window作為屬性add:add};
})();
//直接調用,不需要new
counter.add();
counter.add(); //輸出2

內存泄露解決

當不需要使用閉包時,閉包仍在占用內存,可能會造成 內存泄露

因此,不使用時可以通過:

counter=null;

此時counter就被釋放了

轉載于:https://www.cnblogs.com/yangjiale/p/11261372.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/448100.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/448100.shtml
英文地址,請注明出處:http://en.pswp.cn/news/448100.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

學開車不能急于求成,心急上路

我發現很多人開始學開車以后就急著要上路,覺得開車是很簡單的事情,個人覺得開車雖然不難(相對于會開車的人來說),但是,雖然不是很難,也不是一學會開車起步就能上路去瀟灑的。急于求成的人很容易…

vue 組件間傳值、兄弟組件 、bus方式 ( 1 分鐘看懂 )

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 bus方式的組件間傳值其實就是建立一個公共的js文件,專門用來傳遞消息 1.建立公共文件,并引入 新建msgBus.js文件…

valgrind檢測libevent內存泄露

valgrind檢測libevent內存泄露 github地址 在使用封裝好的http庫時,遇到了如下的內存泄露,一開始在definitely處還存在泄露,這里就不貼圖了,已經被淹沒了。 根據提示定位出錯代碼位置,如下圖: 這里提示ev…

往對象數組里面添加相同的key 不同的value

應用場景&#xff1a;后盾字段沒有發給你 自己補充數據 <div v-for"item in list" :key"item.id"><p>{{ item.id}} ----> {{ item.name}} --->{{ item.sex }}---> {{ item.tel }}---->{{ item.link}}--插入數據</p></di…

vue 子組件 調用、觸發父組件中的方法

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 我發現了兩種寫法。 方法一&#xff1a; 子組件&#xff1a; <template><button click"submit">提交</but…

新手必看一位老司機的十年開車經驗

今天&#xff0c;小編為大家收集整理了一個老司機的十年開車經驗&#xff0c;新手們一定要學哦&#xff0c;因為這種寶貴的開車經驗是我們以后開車過程中每天都要用到的常識。將來無論在什么時候&#xff0c;這種寶貴經驗都會給我們帶來更安全的行車時光。新手必看的十年開車經…

Protobuf使用

Protobuf使用 github地址 目錄 proto3的更新定義協議格式編譯protobufprotobuf_API 枚舉和嵌套類標準消息方法解析和序列化 寫一條消息閱讀消息編譯Protobuf擴展優化高級用法 proto3的更新 在第一行非空白非注釋行&#xff0c;必須寫&#xff1a; syntax "proto3&…

大佬(概率期望DP)

首先根據數據范圍&#xff0c;可以判斷基本上是n^2的復雜度 通過分析我們發現每一次都可以從m個數中任意選&#xff0c;既然任意選&#xff0c;那么此時的概率的分母就是不變的&#xff0c;然而題中涉及的是某一段的最大值&#xff0c;所以我們按套路假設 f[i][j]表示第i天&…

vue 父組件 調用 子組件的方法

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 我們都知道通過$ref可以獲取到某個DOM&#xff0c;但是它也可以用來獲取子組件的實例&#xff0c;調用子組件的方法 例&#xff1a; 子…

新手開車13招技巧

開車是一個靠經驗積累技術的過程&#xff0c;新手們往往會在開車時遇到很多問題&#xff0c;我們用本篇文章和新手講述開車的各種技巧&#xff0c;希望每個新手都能從中受益。第1招技巧&#xff1a;上車前要先看車  上車前繞車轉一圈&#xff0c;看車的外況、輪胎、車底下有沒…

高效的數據壓縮編碼方式 Protobuf

高效的數據壓縮編碼方式 Protobuf github地址 目錄 ProtocolBuffers 是什么為什么要發明 ProtocolBuffersproto3 定義 Message 分配字段編號保留字段默認字段規則各個語言標量類型對應關系枚舉枚舉中的保留值允許嵌套枚舉不兼容性更新 Message未知字段Map 類型JsonMapping p…

解決 VUE前端項目報錯:RangeError: Maximum call stack size exceeded

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 我點擊菜單按鈕報錯&#xff1a; RangeError: Maximum call stack size exceeded 2. 原因&#xff1a;參數傳遞有問題或者方法調用有…

新手必須掌握的學車技巧-上坡起步

我們知道&#xff0c;做什么事情都是萬事開頭難&#xff0c;新手們在學車方面更能體會到這一點&#xff0c;正確掌握學車技巧對于新手來說是非常重要的事情&#xff0c;今天&#xff0c;平安學車網&#xff08;www.paxcw.com&#xff09;就會大家探討一下我們學車時必須掌握的是…

高效的序列化/反序列化數據方式 Protobuf

高效的序列化/反序列化數據方式 Protobuf github地址 目錄 protocolBuffers 序列化 Int32StringMapslice序列化小結 protocolBuffers 反序列化 Int32StringMapslice序列化小結 序列化/反序列化性能最后 protocolBuffers序列化 上篇文章中其實已經講過了 encode 的過程&…

如何配置一個Oracle服務

1、網絡服務名&#xff1a;即填寫OracleTNS的值&#xff0c;如OracleTNSorcl_192.168.1.125&#xff0c;填寫orcl_192.168.1.1252、主機名&#xff1a;192.168.1.1253、服務名&#xff1a;orcl4、測試成功即可。 轉載于:https://www.cnblogs.com/dengshiwei/p/4258719.html

解決 VUE前端項目報錯: Uncaught ReferenceError : initPage is not defined (initPage 方法是有的,依舊報錯找不到)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 明明代碼中定義了 initPage 這個方法&#xff0c;&#xff0c;卻一直報找不到這個方法&#xff1a; Uncaught ReferenceError: init…

掌握新手學車技巧對于新手來說是非常重要的

剛開始學車的時候對于新手來說很多操作不知道從哪里下手&#xff0c;這個時候&#xff0c;如果按照相關的學車技巧來學習的話&#xff0c;對于新手來說是非常有好處的。下面我們就來學習一下讓新手們可以快速進入開車狀態的學車技巧吧&#xff01;基本上駕校的教練都會教學員把…

iView學習筆記(三):表格搜索,過濾及隱藏列操作

iView學習筆記(三)&#xff1a;表格搜索&#xff0c;過濾及隱藏某列操作 1.后端準備工作 環境說明 python版本&#xff1a;3.6.6 Django版本&#xff1a;1.11.8 數據庫&#xff1a;MariaDB 5.5.60 新建Django項目&#xff0c;在項目中新建app&#xff0c;配置好數據庫 api_test…

Jenkins自動編譯庫并上傳服務器

Jenkins自動編譯庫并上傳服務器 github地址 首先添加 git 地址&#xff1a; 再添加定時構建&#xff0c;每天夜里構建一次&#xff1a; 執行 shell 腳本進行構建 cd networklayerecho "build json x86" cmake -S . -B cmake-build-release -DCMAKE_BUILD_TYPERele…

解決:The “data“ option should be a function that returns a per-instance value in component definitions

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 只是想定義一個變量&#xff0c;方便頁面上調用 。 報錯&#xff1a; The "data" option should be a function that re…