深入解讀ES6系列(一)

来源:https://www.cnblogs.com/Three-Z/archive/2020/04/07/QQ--269571627.html
-Advertisement-
Play Games

哈嘍小伙伴們,愛說‘廢’話的Z又回來了,歡迎來到Super IT曾的博客時間,我說啦這個月要帶的福利,說了更的博客肯定不能水你們,要一起進步學習嘛,今天我就把我學習最經典的Blue的ES6掌握的重點羅列出來,不足的歡迎提問留言。 ...


ECMAScript 6(ES6)簡介

前言:

  • 哈嘍小伙伴們,愛說‘廢’話的Z又回來了,歡迎來到Super IT曾的博客時間,我說啦這個月要帶的福利,說了更的博客肯定不能水你們,要一起進步學習嘛,今天我就把我學習最經典的Blue的ES6掌握的重點羅列出來,不足的歡迎提問留言。

目錄:

  1. 變數
  2. 函數
  3. 數組
  4. 字元串
  5. 面向對象
  6. Promise
  7. generator
  8. 模塊化

簡介:

  • 在開張之前我覺得有必要要知道ES6到底是個什麼東西,ES6全名是ECMAScript 6,在2015年6月正式發佈,哇你不要看到2015年覺得知識老舊什麼的,要從基礎的學習才能去掌握它的發展,而且2015也是ES6的一個轉折點,那他是用來幹嘛的呢個人覺得就是把你的代碼更優美了,更嚴謹了,更簡化了,語言嘛本來就是一種工具,拿官網的話來說ECMScript和JavaScript的關係就是,前者是後者的規格,後者是前者的實現,要看ES6的成長史的建議移步阮一峰寫的ES6相容性,總之15年的成長史讓它成為了現在前端工程師的必備知識,畢竟到現在IE10+、Chrome、FireFox、移動端、NodeJS都是相容的,不相容怎麼辦呢,比如公司要求老版本的IE也要能使用,那你就有兩個辦法:1.線上轉換(個人不推薦),2.提前編譯。
// 引入browser.js文件,要我覺得babel==browser.js
<script src="browser.js" charset="utf-8"></script>
<script type="text/bable">
//代碼
</script>
  • 總結: ECMAScript和JavaScript
    • ECMA是標準,JS是實現
      • 類似於HTML5是標準,IE10、Chrome、FF都是實現
      • 換句話說,將來也能有其他XXXScript來實現ECMA
    • ECMAScript簡稱ECMA或ES

歷史版本

時間 ECMA JS 解釋
1996.11 ES 1.0 JS穩定 Netscape將JS提交給ECMA組織,ES正式出現
1998.06 ES 2.0 ES2正式發佈
1999.12 ES 3.0 ES3被廣泛支持
2007.10 ES 4.0 ES4過於激進,被廢了
2008.07 ES 3.1 4.0退化為嚴重縮水版的3.1
因為吵得太厲害,所以ES 3.1代號為Harmony(和諧)
2009.12 ES 5.0 ES 5.0正式發佈
同時公佈了JavaScript.next也就是後來的ES 6.0
2011.06 ES 5.1 ES 5.1成為了ISO國際標準
2013.03 ES 6.0 ES 6.0草案定稿
2013.12 ES 6.0 ES 6.0草案發佈
2015.06 ES 6.0 ES 6.0預計發佈正式版
JavaScript.next開始指向ES 7.0

ES6變數

var與let、const對比:

  • var大家不陌生吧,聲明變數用的,既然這麼熟了直接對比它的缺點吧:
    • var典型三大不足
      • 可以重覆聲明
      • 無法限制修改
      • 沒有塊級作用域
    • let和const的優點
      • 不能重覆聲明
      • const常量能限制修改
      • 有塊級作用域

var與let、const示例:

  • 前兩點應該很好理解,比如我在公司寫一個大型項目,那麼多變數,如果用var,萬一重覆聲明瞭是不是就會直接給我覆蓋掉呢?答案肯定啊,這就很坑爹了是不是,let重覆聲明就直接給你報錯,多好簡單粗暴。
<script type="text/javascript">
			var a = 1;
			var a = 10;
			alert(a)
		</script>

a

  • 第二點就不解釋了你想想π=3.1415926...你就懂了,主要來說第三個,什麼叫塊級作用域呢?{...},這種大括弧括起來的就是了,來一個經典的例子,三個按鈕點擊輸出下標。
	<body>
		<script>
			window.onload = function(){
				var abtn = document.getElementsByTagName("input");
				for (var a = 0; a < abtn.length; a++) {
					console.log(a)
					abtn[a].onclick=function(){
						console.log(a)
						alert(a);
					}
				}
			};
			
		</script>
		<input type="button" value="1" />
		<input type="button" value="2" />
		<input type="button" value="3" />
	</body>
  • 你說輸出什麼?
    在這裡插入圖片描述
    對,頁面載入a就0,1,2了,然後點擊都是3。為啥呢?

閉包

原因是賦值給 onclick 的是閉包,哇,你要問我閉包是個啥?哈,個人建議補一下JS知識,這裡附上閉包鏈接,自己要好好理解喲,閉包也是重要的JS知識掌握點。

然後繼續說,這三個閉包在迴圈中被創建,但他們共用了同一個詞法作用域,在這個作用域中存在一個變數a。這是因為變數a使用var進行聲明,所以具有函數作用域。當onclick的回調執行時,a的值被決定。由於迴圈在事件觸發之前早已執行完畢,如圖列印的0,1,2,變數對象a(被三個閉包所共用)已經指向了abtn的最後一項。所以都是3。

以前怎麼解決?用閉包把他包裹起來就是,或者用函數工廠這樣就OK了,然後你就會神奇的發現最開始a也列印的0,1,2,但是按鈕正常了,原因就是,所有的回調不再共用同一個環境, 閉包為每一個回調創建一個新的詞法環境。在這些環境中,a 就不再恆定都為3了。

for (var a = 0; a < abtn.length; a++) {
	(function(a){
		console.log(a);
		abtn[a].onclick=function(){
			alert(a);
		}
	})(a) // 馬上把當前迴圈項的a與事件回調相關聯起來
}

在這裡插入圖片描述

  • 現在呢?不用這麼麻煩,直接最開始的var a = 0; 改成let = 0;就啥事兒沒有,你就發現0,1,2很自然的就出來了。這裡就相到於開闢了三個代碼塊,理由也很簡單粗暴,因為let是塊級作用域。
<script>
	window.onload = function(){
		var abtn = document.getElementsByTagName("input");
		for (let a = 0; a < abtn.length; a++) {
			abtn[a].onclick=function(){
				alert(a);
			}
		}
	};
</script>

到這裡,變數完事兒~
———————————————————————分割線——————
下節說函數之後的內容

放上我的總博客CSDNGitHub,主要博客博客園pipe


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

-Advertisement-
Play Games
更多相關文章
  • 本篇博客是Redis系列的第4篇,主要講解下Redis的主從複製機制。 本系列的前3篇可以點擊以下鏈接查看: "Redis系列(一):Redis簡介及環境安裝" "Redis系列(二):Redis的5種數據結構及其常用命令" "Redis系列(三):Redis的持久化機制(RDB、AOF)" Red ...
  • 霍普金斯大學的全球疫情分佈圖 根據約翰斯·霍普金斯大學的最新數據顯示,截止北京時間4月5號9時,全球累計報告確診病例已達 134萬+,死亡74000+ 。 在霍普金斯大學的全球疫情分佈圖中,非常直觀的呈現了全球疫情的分佈情況,數據也非常的實時準確。最近一段時間約翰斯·霍普金斯大學發佈的數據也經常出現 ...
  • 一、什麼是觸發器 資料庫觸發器是一個與表相關聯的,存儲的PL/SQL 語句。每當一個特定的數據操作語句(insert update delete)在指定的表上發出時,Oracle自動執行觸發器中定義的語句序列。 觸發器的應用場景如下: 複雜的安全性檢查 數據的確認 資料庫審計 數據的備份和審計 二、 ...
  • 一、什麼是Oracle RAC(Real Application Cluster)? Oracle RAC 是一個具有共用緩存架構的集群資料庫,它剋服了傳統的無共用方法和共用磁碟方法的限制,為您的所有業務應用提供了一種具有高度可擴展性和可用性的資料庫解決方案。Oracle RAC 是 Oracle ...
  • 一、訂製ListView的界面 1.先建立一個Fruit水果類 package com.example.listviewtest; ​ ​ public class Fruit { private String name; private int imageId; public Fruit(Stri ...
  • 老孟導讀:今天給大家分享一下我在學習Flutter的過程中整理的資料,這些文章或者開源項目都是精挑細選的,希望可以幫助到到家。另外相關資料會在Github一直更新,歡迎大家fork,如果喜歡的話給個小星星,非常感謝,Github 地址: "https://github.com/781238222/f ...
  • 新聞 1. "谷歌放出玩家大福利:Android精品游戲全免費 暢玩30天" 1. "[圖]谷歌Play商城測試新界面 移除“已安裝”和“庫”兩個子標簽頁" 1. "LineageOS 17.1發佈:基於Android 10定製 自帶主題引擎" 教程 1. "Kotlin Vocabulary | ...
  • JavaScript入門篇—第1章 請做好準備 本章節主要講解如何在HTML文件中添加JavaScript代碼,掌握必備的基礎語法,為以後來章學習打下基礎。 1-1 為什麼學習JavaScript 1-2 新朋友你在哪裡(如何插入JS) 1-3 我也可以獨立(引用JS外部文件) 1-4 找到你的位置 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...