JavaScript学习笔记【let和var】
var的变量提升
let没有变量提升,而var具有变量提升
var a = 99; // 全局变量a
f(); // f是函数,虽然定义在调用的后面,但是函数声明会提升到作用域的顶部。
console.log(a + ":1"); // a=>99, 此时是全局变量的a
function f() {
console.log(a + ":2"); // 当前的a变量是下面变量a声明提升后,默认值undefined
var a = 10;
console.log(a + ":3"); // a => 10
}
//输出结果
undefined:2
10:3
99:1
let 配合for循环的独特应用
for (var i = 0; i <10; i++) {
setTimeout(function() { // 同步注册回调函数到 异步的 宏任务队列。
console.log(i); // 执行此代码时,同步代码for循环已经执行完成
}, 0);
}
// 输出结果
10 共10个
// 这里面的知识点: JS的事件循环机制,setTimeout的机制等
上面的10还未搞懂(待补充)
如果把 var改成 let声明:
// i虽然在全局作用域声明,但是在for循环体局部作用域中使用的时候,变量会被固定,不受外界干扰。
for (let i = 0; i < 10; i++) {
setTimeout(function() {
console.log(i); // i 是循环体内局部作用域,不受外界影响。
}, 0);
}
// 输出结果:
0 1 2 3 4 5 6 7 8 9
let有暂时性死区的约束
在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)
比如下面这个代码错误
console.log(string); // 错误:Uncaught ReferenceError ...
let string = '我爱掘金';
let变量不能重复声明
let不允许在相同作用域内,重复声明同一个变量。否则报错:Uncaught SyntaxError: Identifier 'XXX' has already been declared
例如:
let a = 0;
let a = 'abc';
// Uncaught SyntaxError: Identifier 'a' has already been declared
具体待补充(2021.1.26)~~
[1] es6.ruanyifeng.com/#docs/let
[2] www.cnblogs.com/fly_dragon/…
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!