1、var 是在全局范圍內有效,可以多次聲明
2、var與const 、let的區別:
let 跟 var 的作用差不多,但有着非常重要的區別。最明顯的區別是, let 聲明的范圍是塊作用域,而 var 聲明的范圍是函數作用域。
const 、let是es6及其以上版本的關鍵字
es6命名規范:
常量 const 聲明一個只讀的常量,一旦聲明,常量的值就不能改變。
變量 let 聲明的變量只在 let 命令所在的代碼塊內有效,只能聲明一次,否則會報錯
3、var關鍵字具體用法:
3.1:定義:要定義變量,可以使用 var 操作符(注意 var 是一個關鍵 字),后跟變量名(即標識符): var message;
這行代碼定義了一個名為 message 的變量,可以用它保存任何 類型的值。(不初始化的情況下,變量會保存一個特殊值 undefined)
3.2:var 聲明作用域:
3.2.1:
使用 var 操作符定義的變量會成為包含它的 函數的局部變量。
比如,使用 var 在一個函數內部定義一個變量,就意味着該變量將在函數退出時被銷毀:比如:
這里, message 變量是在函數內部使用 var 定義的。函數叫 test() ,調用它會創建這個變量並給它賦值。調用之后變量隨 即被銷毀,因此示例中的最后一行會導致錯誤。
3.2.2:
不過,在函數內 定義變量時省略 var 操作符,可以創建一個全局變量:
去掉之前的 var 操作符之后, message 就變成了全局變量。 只要調用一次函數 test() ,就會定義這個變量,並且可以在函 數外部訪問到。
3.2.3:message首先是全局變量,被定義為:false布爾類型,之后被又被重寫為個保存字符串值 hi 的變量,所有不會報錯
3.3 var聲明提升:
使用 var 時,下面的代碼不會報錯。這是因為使用這個關鍵字 聲明的變量會自動提升到函數作用域頂部:
之所以不會報錯,是因為ECMAScript運行時把它看成等價於如下 代碼:
這就是所謂的“提升”(hoist),也就是把所有變量聲明都拉到函數作用域的頂部。此外,反復多次使用 var 聲明同一個變量也 沒有問題: