变量声明 var
- 通过 var 声明的变量会直接声明到全局(window)作用域 上
for (var i = 0; i < 3; i++) { console.log(i); } console.log(i); console.log(window.i); // 0 1 2 3 3
- 问题:var 声明的变量如果想实现局部作用域只能通过函数作用域来实现
//这里的变量i 仍然是作为了全局变量在使用 (function() { for (var i = 0; i < 3; i++) { console.log(i); } })(); console.log(i); console.log(window.i);
0
1
2
i is not underfined
- 示例 异步打印出每次循环的键值(如果不使用匿名函数传递i的参数会输出3次:3)
for (var i = 0; i < 3; i++) { (function(i) { setTimeout(function() { console.log(i); }, 1000); })(i); }
0
1
2
let 实现局部作用域
- let 和 { } 配合可以产生一个新的作用域
for (let i = 0; i < 3; i++) { setTimeout(function () { console.log(i) }, 1000) }
0
1
2
var 进行了变量提升
通过var声明的变量会自动将声明语句默认提升到最前面进行执行,但是对于读代码和理解程序的自上而下运行的流程不太好,同时也会造成变量的全局污染。
console.log(a); var a = 1; console.log(a); // unidefined // 1
console.log(a); let a = 1; console.log(a); // a is not defined
const 变量声明
const 拥有let 所有的特性,唯一的区别就是const声明的变量不可被修改引用空间
const b =1; const b =2; console.log(b); // Identifier 'b' has already been declared
const children = {age:12}; children.age = 5; children.sex = '女'; console.log(children); // {age: 5, sex: "女"}
标签:const,log,let,var,console,变量 From: https://www.cnblogs.com/apon/p/17352579.html