var
、let
和 const
let
与 var
的区别
let
仅作用于let
命令所在的代码块内( block-scoped );而var
声明的变量作用于函数块内( function-scoped ),只有函数块内能引入新的作用域。let
不受变量提升的约束;而var
声明的变量存在变量提升。let
声明的全局变量不是全局对象的属性,即不能通过window
对象来访问;而var
声明的全局变量是全局对象的属性,即可以通过window
对象来访问。let
不允许重复定义同一个变量;而var
命令可以无限次重复定义一个变量。
Example 1:作用域
1 | function timecount1() { |
Example 2:变量提升
1 | console.log(x); // undefined |
Example 3:全局变量
1 | var x = 1; |
Example 4:重复定义
1 | var x = 1; |
立即执行函数(IIFE)
在 let
出现之前,往往使用立即执行函数解决 var
声明的变量的作用域问题。
Example:
1 | function timecount3() { |
严格模式
在严格模式下,不允许使用未定义过的变量(即不会有变量提升的问题出现了)。
const
命令
与 let
命令用法基本相同,用于声明一个常量,一旦声明,该常量值无法改变。
1 | const PI = 3.14159; |
使用 const
命令声明的对象,对像本身无法改变,但是对象的属性值依旧可以改变。
1 | const obj = { a: 1 }; |