变量声明 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: "女"}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了