1. 程式人生 > >ES6系列(一)->定義變數

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,是我們這個項目的關鍵部分之一。所