JS閉包總結

来源:http://www.cnblogs.com/Tiboo/archive/2017/05/21/6885264.html
-Advertisement-
Play Games

閉包: 有權訪問另一個函數作用域中變數的函數 用處: 1 讀取函數內部的變數 2 讓某些變數的值始終保持在記憶體中 在瞭解閉包之前,我們需要明白變數的作用域,即函數內部能夠讀取全局變數,但是函數外卻不能讀取函數內的局部變數 1 當使用閉包訪問局部變數 此時f2就是閉包 2 累加 2.1 使用全局變數累 ...


閉包: 有權訪問另一個函數作用域中變數的函數

用處: 1 讀取函數內部的變數
         2 讓某些變數的值始終保持在記憶體中

在瞭解閉包之前,我們需要明白變數的作用域,即函數內部能夠讀取全局變數,但是函數外卻不能讀取函數內的局部變數

1 當使用閉包訪問局部變數

function f1(){
    var n = 999;
    function f2(){
      alert(n);
    }
    return f2;
}
var result = f1();
result();   // 999

此時f2就是閉包

2 累加

 2.1 使用全局變數累加

 var num = 1;
 function add(){
    num++;
 }
 alert(num);   //1
 add();
 alert(num);   //2
 add();
 alert(num);  //3

可以達到想要的效果,但是因此帶來的是全局污染

 2.2 使用局部變數累加

 function add(){
    var num =1;
    num++;
    return num;
 }
 alert(add()); //2
 alert(add()); //2

輸出的結果每次都是2是因為每次執行add函數時,num又被初始化了

2.3 使用閉包累加

  function add(){
    var num = 1;
    return function(){
        num++;
        return num;
    }
  }
  var b= add();
  alert(b()); //2
  alert(b()); //3

在沒有使用全局變數的情況下,也能實現累加,這裡值得註意的點是:最後是把add()賦值給變數b;而不是直接alert(add()());這裡是可以防止num再一次初始化;


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 原文參考http://mp.weixin.qq.com/s?__biz=MzU3MDA0NTMzMA==&mid=2247485490&idx=1&sn=15197b4b53e0669e4a017e54a31fb39c&source=41#wechat_redirect 使用原生js ...
  • 本文介紹了windows系統下安裝`nvm nodejs`版本管理包。並且配置了阿裡巴巴的`nodejs`的鏡像和`npm`鏡像。並且,結合webstorm創建出了`nodejs express`項目,成功安裝依賴並運行起來。 ...
  • 微信小程式demo "github地址" 去年小程式剛發佈時特別火,趕潮流做了個demo。感覺小程式開發還是比較簡單的,主要是官方文檔寫得比較好,遺憾的是很多API需要微信認證才能使用。 由於小程式包大小限制在1M以內,所以商品圖片等資源放在了雲上,另外用Nodejs+Express寫了個簡單的AP ...
  • 1.元素浮動: 1)使用 float:left; 這樣的格式設置元素的浮動方式,屬性值可以是left,right; 2)元素設置為左浮動時,元素將從原區域浮動到瀏覽器的左側頁面;右浮動時,就會附在右側的區域,而且元素是按照第一個元素在右側的第一個位置,依次往左排列; 3)設置了浮動後,該元素相當於直 ...
  • HTML中有很多的標簽(元素),可以按照這些元素在網頁中所占的空間情況進行分類。具體可以這樣簡單的分類: 1.塊級元素:指的是在網頁中該元素獨自占據網頁的一行顯示區域,即當使用了該元素後,該元素會使下一個元素在下一行展示,也就是產生換行;根據資料的定義是:標簽的display屬性值為block; 2 ...
  • 上一篇介紹了模板引擎pug.js的用法,這一篇就主要寫後臺邏輯了。 後臺的大部分的功能都有了,只是在已經登錄的狀態下,前臺和後臺的邏輯處理還不是很完善。 先上幾張圖吧,仿舊版的簡書,改了下UI,因為沒有簡書那麼多內容,所以沒必要完全做成一樣的。 1.項目結構 app.js 是整個工程的入口 mode ...
  • 此文章主要總結UIEvent相關的事件,如有不對的地方,歡迎指正。 一、uitls.js(綁定事件公共類) 主要做一些事件名的相容性處理。 二、baseEvent 2.1 相容點 2.2 一些代碼 三、焦點事件 不是所有的標簽都支持焦點事件,如div(不可編輯狀態)、span、p等這類佈局和顯示內容 ...
  • 一、顏色值 1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title>顏色值</title> 6 <style type="text/css"> 7 8 </style> 9 </head> 10 11 <body> ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...