摘要:變量和常量的聲明一般的聲明,不在函數內就是全局變量,值可以是基本和引用值,可以隨時修改和刪除語法同一個作用域的聲明,只要有同樣的聲明都會報錯,只能修改值語法,和一樣,但是不能更改值以上兩個語法都不存在變量提升的效果直接使用的話,直接引用錯誤
變量和常量的聲明
var a = 34; //一般的聲明,不在函數內就是全局變量,值可以是基本和引用值,可以隨時修改和刪除
let 語法,同一個作用域的聲明,只要有同樣的聲明都會報錯(Uncaught SyntaxError),只能修改值
let newa = 34;
const語法,和let一樣,但是不能更改值;
const b = 34;
以上兩個語法都不存在變量提升的效果;直接使用的話,直接引用錯誤;
console.log(newb); //ReferenceError let newb = 34;
TDZ 暫時性死區,只要在同一作用域內,包括函數和塊級全局,let 和const 就會綁定在這個區域,在這之前使用的話,都會報錯,直到聲明過后
使用let和const或者var在塊級作用域內,會把變量限定在代碼塊內,無法突破;
{ typeof g; //ReferenceError typeof v; //ReferenceError typeof d; //undefined let g = 34; const v = 3; var d = 4; }; typeof g; //undefined typeof v; //undefined typeof d; //undefined
需要注意的是const變量的值是引用值的話,引用值的指針不變,就可以添加屬性和方法,但是不能從重新指定對象引用值
const obj = [];//聲明一個常量對象 obj.name = "obama"; //obama obj.name = "bush" //bush; obj = {} // typeError
使用大括號{}相當于聲明了一個代碼塊,可以無限制嵌套{{{{ }}}},
全局對象,在ES5之前,全局屬性和方法是屬于window的屬性和方法,使用,window.valiable,都訪問到,但是在es6的語法里,雖然在在全局聲明的變量和對象都可以直接訪問,和之前還是有區別的
var a = 45; let b = 23; window.a ->45; window.b ->undefined;
循環函數
for(var i = 0 ;i<10 ;i++){ console.log(i); } //順序輸出0,,,,,9; //此時console.log(i) ->10;i為全局變量; var arr = []; for(var i = 0 ;i<5 ;i++){ arr.push(function(){return i}) } //此時arr數組里面有5個函數function(){return i }; //修改函數 for(var i = 0 ;i<5 ;i++){ arr.push((function(i){return i})(i)) }; //執行 var i = 0; arr.push();//此函數只會保存括號里的值,可以是任何值,函數也行,不一定是數值; (function(){function(){return i})() //IIFE 此時的i值為0;輸出0,不立即執行的話就是普通函數; arr.push(0);//arr ->[0]; // . // . // . var i = 4; arr.push(); (function(){function(){return i})() arr.push(4);//arr ->[0,1,2,3,4]; var i = 5; i <5 //false;
關于閉包,
為何let會保存原來的值??
var arr = []; for(let i =0;i<5;i++){ arr.push(function(){console.log(i)}) }; //每次迭代 { let i = 0; arr[0] = function(){console.log(i)} } //此時因為let綁定在塊級作用域,注意此處的{ };i的值只能訪問到 i = 0;無法突破作用域,得到其他的值,但是確記住了此時的i值,類似閉包函數,而且不會改變!! { let i =1; arr[1] = function(){console.log(i)} } { let i = 2; arr[2] = function(){console.log(i)} } { let i =3; arr[3] = function(){console.log(i)} } { let i = 4; arr[4] = function(){console.log(i)} } //let 這樣的行為,并不會報錯是因為ES6語法針對for ,for-of for-in 特殊規范的,在其他地方,對同一個let 變量賦值的話,會報語法錯誤 let i = 0; let i = 1 //報錯
let和const對于在循環中新的綁定不會報錯對const修改值會報錯,但綁定不會
const arr = ["a","b","c"]; const obj = { name:"obama", age :73 } for(let i = 0;ilet 和const在函數使用默認值的時候也有一些行為規則
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/89017.html
摘要:聲明的變量只在命令所在的代碼塊內有效使用命令聲明的變量在解析的過程中不會被預解析也就是不存在變量提升了使用命令聲明的變量會存在暫時性死區不同于全局變量不再是的屬性了會報錯出現了暫時性死區使用這個變量不允許再重復聲明聲明過的變量也不可以再使用 let 1、let聲明的變量只在命令所在的代碼塊內有效2、使用let命令聲明的變量在解析的過程中不會被預解析(也就是不存在變量提升了)3、使用le...
摘要:允許按照一定的模式,從數組或者對象中取值,對變量進行賦值數組解構的對象要具有接口也就是可以遍歷按照對應的關系進行取值如果解構不成功變量的值就是如果右側的數值不是數組,就會報錯注意字符串是可以遍歷的也可以有默認值只要被賦值的變量不是嚴格就是默 ES6允許按照一定的模式,從數組或者對象中取值,對變量進行賦值 數組 var a = 2; var b = [1,2]; var c = this...
摘要:之小白初入江湖超文本標記語言簡稱是一種用于創建網頁的標準標記語言。描述了一個網站的結構語義隨著線索的呈現,使之成為一種標記語言而非編程語言。是塊級元素,是行內元素。層疊樣式表簡稱是一種用來為結構化文檔如添加樣式的工具。 HTML & CSS之小白初入江湖 1. HTML 超文本標記語言(HyperText Markup Language, 簡稱HTML)是一種用于創建網頁的標準標記語言...
摘要:之小白初入江湖超文本標記語言簡稱是一種用于創建網頁的標準標記語言。描述了一個網站的結構語義隨著線索的呈現,使之成為一種標記語言而非編程語言。是塊級元素,是行內元素。層疊樣式表簡稱是一種用來為結構化文檔如添加樣式的工具。 HTML & CSS之小白初入江湖 1. HTML 超文本標記語言(HyperText Markup Language, 簡稱HTML)是一種用于創建網頁的標準標記語言...
摘要:然而,這一次,將有三個作為前三個命令行參數提供。編寫一個時間服務器服務器監聽一個端口,以獲取一些連接,這個端口會經由第一個命令行參數傳遞給程序。 learnyounode 13課總結(下) 前斷時間較為忙碌,所以learnyounode的下半部分總結一直拖到了現在,罪過罪過。那么今天我就將8-13課的內容整理出來,將后半部分的知識稍微梳理一下。 這里推薦一篇learnyounode...
閱讀 2315·2021-11-24 10:33
閱讀 1385·2019-08-30 15:43
閱讀 3276·2019-08-29 17:24
閱讀 3481·2019-08-29 14:21
閱讀 2220·2019-08-29 13:59
閱讀 1735·2019-08-29 11:12
閱讀 2811·2019-08-28 18:00
閱讀 1849·2019-08-26 12:17