深入解讀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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...