ES6系列(一)->定義變數
說在系列之前
想要在自己電腦上執行起來es6,請自行配置好環境,這裡就不說明怎麼配置了,如果有不會的可以百度,百度上很多教程
關於es6是什麼,ECMA是什麼,這種問題這裡不會去說明,想要了解的也請百度
如果對文中出現的任何問題,不管是討論,指錯等等都可以直接在下面留言
廢話不多說,開始正文
在es6之前,我們定義變數使用 命令var;
//基本都是如下這樣去定義
var x,y,z = 1;
var a = 10;
var b = 20;
var c = function(){};
var d = {};
var e = [];
//相信上面大家是沒有異議的,如果有的話,那麼建議百度一下var的使用方式;
//或者再看看《前端--從var入門到徹底放棄》這本書 0.0 (๑˃∀˂๑);
es6新增了兩種定義變數的命令let 和 const,首先我們來看let;
let
let 命令使用方式和var命令一模一樣,我們把上面的例子改成這樣:
let x,y,z = 1;
let a = 10;
let b = 20;
let c = function(){};
let d = {};
let e = [];
完全是成立的,沒有任何毛病,當然僅僅是使用方法一模一樣,下面分析let有哪些方面是和var有區別的;
從變數提升說起
//示例一
let a1 = 10;
var b1 = 10;
console. log(a1); // 10
console.log(b1); // 10
//示例二
console.log(a2); // 報錯 : a is not defined
console.log(b2); // undefined
let a2 = 10;
var b2 = 10;
從上面示例看來,var 和 let 宣告的變數,在宣告之後呼叫完全沒問題,但是如果在定義之前呼叫處理的情況就不一樣了;
這是因為:var 定義出來的變數是存在變數提升的,但是let定義的變數是不存在變數提升的
所以在之前呼叫就會報錯
從作用域來說
//示例一
var a = 10;
let b = 20;
function f1(){
var a = 11;
let b = 21;
console.log(a); // 11
console.log(b); //21
}
f1();
console.log(a); // 10
console.log(b); // 20
//示例二
var a = 10;
let b = 20;
function f1(){
console.log(a); // undefined
console.log(b); //報錯 :b is not defined
var a = 11;
let b = 20;
}
f1();
console.log(a); //10
console.log(b); //20
//示例三
if(true){
var a = 10;
let b = 20;
}
console.log(a) // 10;
console.log(b) // 報錯:b is not defined
for(var i=0;i<3;i++){
var a = i;
let b = i;
}
console.log(a) //2
console.log(b) //報錯:b is not defined
示例一:說明let定義的變數和var定義的一樣,都會在函式形成的作用域內繫結,不受函式之外定義的變數影響;同樣也影響不到外界的變數;
示例二:說明,不管是在全域性作用和區域性作用域let 都不會存在變數提升
示例三:可以看出,var的作用範圍完全取決於作用域塊的範圍(說明一下:能夠形成作用域塊的只有全域性作用域和函式作用域),但是let的作用範圍取決於是否在{ }區塊內定義的變數,如果是隻在該區塊內定義,該區塊內呼叫有效,否在就會報錯;
從多次申明來看
//示例一
var a = 10;
var a = 11;
let b = 20;
let b = 21;
console.log(a); // 11
console.log(b); // 報錯: Identifier 'b' has already been declared
示例一說明:
var 定義出來的變數可以覆蓋前面定義的變數,而let定義出來的變數在同一區塊內也就是{}是不能重複宣告的否則就會報錯;
const
其實const與let很相似,同樣沒有變數提升,同樣以花括號{ }作為作用範圍,同樣不能多次宣告
let 和 const 的區別就在於
//示例一
let a = 10;
a = 20;
const b = 30;
b = 35;
console.log(a) //20
console.log(b) //報錯: Assignment to constant variable
從示例一可以看出來:const申明的變數,一旦申明瞭,他的值就能再改變,否則就會報錯
最後一點
全域性作用域中賦值,let 和 const的頂級物件都不是window ,而var 是(假定是在瀏覽器環境中)
var a = 10;
let b = 20;
const c = 30;
console.log(window.a) // 10
console.log(window.b) // undefined
console.log(window.c) // undefined
好了,關於變數的定義就講到這裡了,感謝大家的閱讀,還是那句話,如果大家有任何疑問或者指錯,請在下方留言;
微信搜尋關注公眾號 【大前端js】,回覆vue教程,react教程,webpack實戰等等,獲得不同的視訊教程,大量視訊教程等你來拿;
原創不易,總結不易,手打不易,轉載時請註明出處,謝謝
相關推薦
ES6系列(一)->定義變數
說在系列之前 想要在自己電腦上執行起來es6,請自行配置好環境,這裡就不說明怎麼配置了,如果有不會的可以百度,百度上很多教程 關於es6是什麼,ECMA是什麼,這種問題這裡不會去說明,想要了解的也請百度 如果對文中出現的任何問題,不管是討論,
深入解讀ES6系列(一)
# ECMAScript 6(ES6)簡介 ## 前言: * 哈嘍小夥伴們,愛說‘廢’話的Z又回來了,歡迎來到Super IT曾的部落格時間,我說啦這個月要帶的福利,說了更的部落格肯定不能水你們,要一起進步學習嘛,今天我就把我學習最經典的Blue的ES6掌握的重點羅列出來,不足的歡迎提問留言。 ## 目錄:
Android Studio 配置系列(一):自定義程式碼註釋
1. 自定義檔案頭註釋 依次點選File -> Settings ->Editor ->File and Code Templates,在詳細展示視窗點選includes選項卡,找到FileHeader點選,在編輯視窗輸入自定義的註釋模板即可
【ABAP自學系列(一)】
發的 img api .cn ima code pat 查看 屏幕 一、查看補丁包級別 然後看Patch Level即可。 常用T-code: SE38(寫程序) SE80(屏幕開發) Smartform(開發smartform打印) SE37(可以查看function
Linux基礎學習系列(一)
內核版本 比較 其中 問題 測試版 工具 含義 語言 復制 Linux是一種類似於UNIX的操作系統,由Linus Torvalds於1991年在minix操作系統的基礎創建。Linux憑借其優良特性已經成為目前發展潛力最大的操作系統。 Linux的版本有內核版本和
spring boot學習系列(一)
web服務器 應用程序 spring 控制器 做什麽 spring boot開發第一個應用程序1、spring boot是什麽?2、spring boot容易上手嗎?寫這篇文章技術文章,主要是記錄日常的學習以及理解。我們重新認識一下spring假設你受命使用spring開發一個簡單的hel
asp.net core入門教程系列 (一)
home padding 方式 title sys 活性 elf tro ash Asp.Net Core簡介 ASP.NET Core 是一個全新的開源、跨平臺框架,可以用它來構建基於網絡連接的現代雲應用程序,比如:Web 應用,IoT(Internet Of Thin
【原創】源碼角度分析Android的消息機制系列(一)——Android消息機制概述
run 權限 開發 等待 通過 讀取 概述 走了 color ι 版權聲明:本文為博主原創文章,未經博主允許不得轉載。 1.為什麽需要Android的消息機制 因為Android系統不允許在子線程中去訪問UI,即Android系統不允許在子線程中更新UI。 為什麽不允許
vue系列(一)子組件和父組件
top parent sage too msg pro 工具 light java 父組件傳遞數據到子組件props 父組件 <template> <div class="main"> <div class="top">
Hadoop源碼系列(一)FairScheduler申請和分配container的過程
opened running fetch utils ostream png on() threshold metadata 1、如何申請資源 1.1 如何啟動AM並申請資源 1.1.1 如何啟動AM val yarnClient = YarnClient.createY
源碼分析系列(一)x264_main_dataflow
images 9.png 所有 malloc 控制 相關 .com 圖1 memory http://www.cnblogs.com/xkfz007/articles/2616153.html 幀內幀間編碼部分關鍵函數 1.1 x264_encoder_open (x
ORM框架疏理——廖雪峰實戰系列(一)
命令 delete ica 隱式 orm mod prim 數據結構 lam ORM(Object Relational Mapping,對象關系映射),是一種程序設計技術,用於實現面向對象編程語言裏不同類型系統的數據之間的轉換。從效果上來說,它其實創建了一個可在編程語言裏
優秀開源軟件學習系列(一)——從零學習Spring4以及學習方法分享
文檔 軟件 準備 相關性 培訓 獎勵 在哪裏 方式 列表 一、目的1.掌握Spring4怎樣使用,以便將這個框架作為自己的一項技能。2.掌握Spring官網是怎樣介紹其產品的,在心中對Spring有最官方的、最直觀的了解。在Spring的相關領域,能夠知道怎麽下載Sprin
PHP系列(一)PHP流程控制結構
php流程控制while(){}do{}while(); for( 表達式1; 表達式2;表達式3 ){ 語句或語句序列;} if(){}if(){}elseif{}<?php$i=0;while(true){ if($i>=100) break; echo "@@
RabbitMQ學習系列(一): 介紹
ref 原理 二維碼 host 屬性 訂閱 什麽 設計 發的 1. 介紹 RabbitMQ是一個由erlang開發的基於AMQP(Advanced Message Queue )協議的開源實現。用於在分布式系統中存儲轉發消息,在易用性、擴展性、高可用性等方面都非
Python開發MapReduce系列(一)WordCount Demo
logs 3-9 line counter ota python開發 home num brush 原創,轉發請註明出處。 MapReduce是hadoop這只大象的核心,Hadoop 中,數據處理核心就是 MapReduce 程序設計模型。一個Map/Reduc
Javascript系列(一)語法、關鍵保留字、變量
javascript ECMA是European Computer Manufacturers Association的縮寫,即歐洲計算機制造商協會。歐洲計算機制造商協會是制定信息傳輸與通訊的國際化標準組織。ECMAScript是ECMA制定的標準化腳本語言。目前JavaScript使用的ECMAS
Java集合幹貨系列-(一)ArrayList源碼解析
div imp ins bject 增加 toa tof capacity == 前言 今天來介紹下ArrayList,在集合框架整體框架一章中,我們介紹了List接口,ArrayList繼承了AbstractList,實現了List。ArrayList在工作中經常用到,所
Openlayers系列(一)關於地圖投影的理解
數據庫 nbsp 簡單的 是個 ace 投影 存儲 mongodb uid 近期開發以MongoDB為基礎的分布式地理數據管理平臺系統,被要求做一個簡單的demo給客戶進行演示。於是筆者便打算向數據庫中存儲一部分瓦片數據,寫一個簡單的存取服務器,使用Openlayers客戶
Python操作rabbitmq系列(一)
targe 紅色 入門 web 之間 cap ssa 隊列 技術 從本文開始,接下來的內容,我們將討論rabbitmq的相關功能。我的這些文章,最終是要實現一個項目(具體是什麽暫不透露)。前面每一篇,都是在為這個系統做準備。rabbitmq,是我們這個項目的關鍵部分之一。所