var let const随笔记(1)
1. 基本概念
var 声明了一个变量,并且可以同时初始化该变量
let 声明一个块级作用域的本地变量,并且可选的赋予初始值
const 声明创建一个只读的常量,作用域与let相同,这并不意味着常量指向的值不可变,而是变量标识符的值只能赋予一次
注意:在语法中的块级作用域是指if/else/for/while语句里2个大括号之间的部分
2. 基本用法
(1)let 所声明的变量,只在let命令所在的代码块中有效
1 { 2 let a = 1; 3 var b= 2; 4 } 5 6 a //ReferenceError: a is not defined 7 b // 2
上面的代码块中,分别用了let 和var 定义了两个变量,然后在代码块之外分别调用这两个变量,结果let声明的变量报错,var声明的变量返回了正确的值,这说明:
let声明的变量只在它所在的代码块中有效。
for循环中很适合用let;同时,还有一个很特别之处,如下面的第二段代码:循环语句部分是一个父作用域,而循环体内是一个单独的子作用域,因此输出了三次‘abc’,这表明:作用域内部的变量i和外部的变量i是分离的。
for(let i=0;i<3;i++){} console.log(i);//RenferenceError:i is not defined
for(let i=0;i<3;i++){ let i="abc"; console.log(i); } // abc // abc // abc
(2)const声明一个只读的常量,一旦声明,常量的值就不可以改变,如下代码,当执行到第三行就会报错
1 const PI = 3.1415926; 2 console.log(PI); //3.1415926 3 PI = 3; //TypeError: Assignment to constant variable.
同时,const声明的变量不得改变值,所以一旦声明变量就必须立即初始化,不能留到以后赋值
const str; // SyntaxError: Missing initializer in const declaration 这表示,对于const来说,只声明不赋值,就会报错。
但是以下代码是不会报错的,const定义常量值,不能够重新赋值,如果值是一个对象,可以改变对象里边的属性值
{ const a = {value:1} a.value = 2 console.log(a) // {value:2} const b = [1,2,3] b.push(4) console.log(b) // [1,2,3,4] }