小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
1、 var,变量声明标志符,声明提升
let,块级变量声明标识符,超出作用域自动销毁
const,常量声明标识符,值不可修改
2、var 、 let
在{ } 中声明变量自动产生一个块作用域,使用var声明变量会提升至全局变量,使用let声明变量则会声明块级变量,超出{ } 则自动销毁。
注1:function fn(){ } 这样会生成函数作用域,内部变量超出范围都会销毁
注2:for(var i =0; i < 3; i++){ } 此处声明的变量作用域取决于标识符,如此声明全局变量
注3:使用let声明的变量非全window对象下的变量。在ES6环境下可通过global对象调用
3、let
同一作用域内,相同的变量不能以任何标识符多次声明。
var a = 2;
if( true ){
console.log( a ); // ReferenceError
let a;
}
使用let声明变量会绑定作用域,声明变量之前使用都是错误的。如上,在全局下声明了变量a,当在{ }内使用let声明变量时就会绑定当前域,声明前使用都是错误的;
4、外层代码块不受内层代码块的影响
function f1(){
let n =5;
if( true ) {
let n = 10;
}
console.log( n ); // 5
}
如果使用var声明变量,最后输出的值都是10;
注:let声明的变量不会泄露,for(var i = 0; ; ;){} 变量i会在循环结束后泄露为全局变量
5、常量const
var a = 2;
const a = 3; // Error 需定义的常量不能被已定义
const A = 3;
var A = 2; // Error 常量值不可更改
const B; // Error 常量定以后应立即赋值,之后不可更改
const C = [];
C.push('Hello world'); // 常量指向地址,当值为数组\对象,可对值进行操作
C = [ ]; // Error 常量数组\对象可更改值,但其本身不可重定义
用于定义在程序运行时不可修改的变量