摘要:而聲明一個變量,如果沒有明顯的賦值操作,那么默認為賦值中有三種變量聲明的方式,和。而這后兩種聲明方式,是在里才出現的。函數的參數不要用聲明,嘛,就用來聲明常量,或是不改變初值的變量參考資料和命令深入淺出和
Js的變量特點是松散型,就是說值跟類型是沒有關系的,變量只是一個存值的占位符,不會根據初始化存入的值類型,給變量設置特定的類型,所以變量在初始化后,可以在改變值的同時改變值類型。而聲明一個變量,如果沒有明顯的賦值操作,那么默認為賦值undefined
Js中有三種變量聲明的方式:var ,let和const。而這后兩種聲明方式,是在es6里才出現的。他們可以說是彌補var在變量聲明的遺憾,解決了在使用過程中出現的一些問題
var聲明
var的特點如下:
作用域范圍為封閉的全局函數或是局部函數
同一個作用域里重復聲明同名變量,不會報錯
在嵌套的子函數里,重新聲明外層函數中同名的變量,不會改變外層函數中變量的值
變量可以提升到全局代碼或是函數頂端執(zhí)行,所以打印變量值可以在書寫聲明變量之前執(zhí)行,也不會報錯,而賦值只有等到執(zhí)行到賦值那一句才會執(zhí)行
沒有聲明的變量,會被隱式創(chuàng)建為全局變量,即全局對象的屬性(獨有)
非聲明的變量,只有在賦值的時候才會被創(chuàng)建
非聲明的變量,因為是全局對象的屬性,所以可以用delete刪除
栗子?
這個例子說明非聲明的變量,變?yōu)槿謱ο蟮膶傩?,可以delete刪除
let聲明
let聲明變量又稱更精確的var,主要應用于塊作用域,也就是if for switch以及{}這樣的塊里,可以出現在它自己聲明所在的塊和它包含的子塊里。
它有這樣的特點:
在同一個塊作用域里,重新聲明一個同名變量,會報錯
在嵌套中的子塊作用域里,重新聲明一個與外層塊作用域相同的同名變量,不會保留外層塊的變量值,因為屬于不同的變量作用域
沒有提升作用,所以在變量聲明之前使用會報錯,這一個現象,也稱為:暫存死區(qū)
不能作用全局對象的屬性
應用:因為可以是塊作用域,所以let的出現,可以代替立即執(zhí)行函數
栗子?
這個例子說明,var可以提升變量聲明,但是let不可以
這個例子說明,同名的變量子塊中的變量跟外層塊中的變量,是不同的兩個變量
這個例子說明,即便是有全局變量,但是在塊的作用域里,有l(wèi)et聲明的同名作用域起作用,而且在聲明之前不可用
這個例子說明,不能用let聲明跟參數同名的變量
這個例子說明,let的使用,替換了立即執(zhí)行函數
const聲明
const也有l(wèi)et的特點3和4,也是一個塊作用域的變量聲明方式,除此以外還有自己的特點
必須在聲明的同時賦值初始值
一旦賦值就不能改變,而且聲明的變量通常是常量,用大寫表示
也是因為2的原因,所以不能作為for循環(huán)的循環(huán)變量
栗子?
這個例子說明const不能作為for循環(huán)的變量
這個例子說明const聲明的變量賦值后不能改,只是同名變量不能再賦值,但是可以給變量的屬性賦值
最后來個小總結:
var嘛,能用let的時候就不用var,比如用let的很好的場景:for的循環(huán)變量,可以保證每一次循環(huán)都是一個新變量,而不是用var時候的同一個變量,if或是switch里面,但是注意一種情況就是let x = x + 1這個時候是會報錯的,因為也是犯了未聲明就使用的錯,賦值操作是從右到左的,也就是說會先計算好右邊的值,才會把最終結果賦值給左邊。函數的參數不要用let聲明,
const嘛,就用來聲明常量,或是不改變初值的變量
參考資料:https://developer.mozilla.org...
https://developer.mozilla.org...
https://developer.mozilla.org...
http://voidcanvas.com/es6-var...
let 和 const 命令
Let It Be - How to declare JavaScript variables
深入淺出ES6:let和const
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.hztianpu.com/yun/94268.html
摘要:語法和數據類型正文開始本章節(jié)復習的是中的基本語法,變量聲明,數據類型和字面量。聲明一個塊作用域的局部變量,可賦一個初始值。變量聲明有三種方式如,聲明局部變量和全局變量。 最近開始把精力放在重新復習JavaScript的基礎知識上面,不再太追求各種花枝招展的前端框架,框架再多,適合實際項目才是最重要。 上星期在掘金發(fā)布了幾篇文章,其中最大塊算是 【復習資料】ES6/ES7/ES8/ES...
摘要:但是如果使用,作用域塊級作用域內,在還沒使用聲明一個變量的時候,訪問該變量,將會獲得,從作用域開始到語句之間,就是暫存死區(qū)。 0x001 var 語法 var varname1 [= value1 [, varname2 [, varname3 ... [, varnameN]]]]; 使用 var a, b=2 // 聲明多個變量,可以賦值,也可以不賦值 a=1 // 先聲...
摘要:規(guī)范對其是這樣進行的描述的。聲明定義了在正在運行的執(zhí)行上下文作用域內的變量環(huán)境中的變量。在執(zhí)行時,由帶有的定義的變量被賦其設定項的的值。由于變量已經被聲明,是可訪問的,因此會打印出正確的結果。 你想在在變量聲明之前就使用變量?以后再也別這樣做了。 新的聲明方式(let,const)較之之前的聲明方式(var),還有一個區(qū)別,就是新的方式不允許在變量聲明之前就使用該變量,但是var是可以...
摘要:已經被聲明了舉例說明塊級作用域報錯,常量初始化之后內部值不可改必須初始化賦值的問題。不支持預解析不允許重復聲明支持塊級作用域舉例說明報錯,。解決地址引用的方法通過轉化為字符串,再轉化為對象。此方法存在問題中缺少 1.var , let , const var 1.預解析(變量提升) 2.可以重復聲明變量 let 1.不支持預解析(必須先聲明,后使用...
閱讀 3790·2021-10-14 09:43
閱讀 3384·2021-08-25 09:38
閱讀 676·2019-08-30 15:55
閱讀 1469·2019-08-30 13:05
閱讀 2302·2019-08-29 16:05
閱讀 574·2019-08-29 12:58
閱讀 2869·2019-08-29 12:34
閱讀 3302·2019-08-26 12:15