let 和 const 是 javascript 里面最新的变量声明方式,let 与 var 很相似,而 const 是 let 的增强,能阻止对一个变量的再次赋值。
-
var 声明
- 弱类型:var 声明变量时,不管声明再任何位置,总会提到全部代码执行前——声明提前,且可不必对变量类型做约束,变量类型可随需要任意改变赋值;
- 作用域:var 声明的变量,可以在包含他的函数、模块、命名空间、全局作用域内部任意位置被访问;(多次声明同一变量并不会报错)
- 变量值:var 声明的变量,其值为函数执行结束时的值,
//1.重复赋值——里层的for会覆盖变量i function sumMatrix(martrix:number[][]){ var sum=0; for(var i=0;i<martrix.length;i++){ var currRow=martrix[i]; for (var i=0;i<currRow.length;i++){ sumb+=currRow[i] } } return sum; } //2.变量总取得函数执行后的值 for (var i = 0; i < 5; i++) { setTimeout(function() { console.log(i); }, 100 * i); } //5,5,5,5,5
-
let 声明
- 强类型: let 声明的变量,必须先声明,再访问;变量声明前的代码区域都属于时间死区;
- 块作用域:let 声明的变量,其作用域是词法作用域,亦即块作用域,不能在包含它们的函数外访问;
- 重定义及屏蔽:let 声明的变量,不可重复声明;在一个嵌套作用域里引入一个新名字的行为称做屏蔽;
- 变量的获取:块级作用域拥有独立的运行环境;
for (let i = 0; i < 5; i++) { setTimeout(function() {console.log(i); }, 100 * i); } //0,1,2,3,4
-
const 声明
拥有和 let 一样的作用域,但不可进行再赋值;
ps:具体使用何种方式声明变量,遵循“最小特权原则”。
__end