js中Let和Var的相同点和区别
程序员文章站
2022-06-28 19:01:01
js中Let和Var的相同点和区别Let和Var的相同点Let和Var的区别总结Let和Var的相同点1 在函数内声明变量时,使用 var 和 let 很相似,它们都有函数作用域2 如果在块外声明声明,那么 var 和 let 也很相似,它们都拥有全局作用域let x = 10;//全局作用域var y = 10;//全局作用域{var z = 10;//块作用域}Let和Var的区别1 var关键字声明的变量没有块作用域,在块{ }内声明的变量可以从块之外进行访问。let关键字声明...
js中Let和Var的相同点和区别
Let和Var的相同点
1 在函数内声明变量时,使用 var 和 let 很相似,它们都有函数作用域
2 如果在块外声明声明,那么 var 和 let 也很相似,它们都拥有全局作用域
let x = 10;//全局作用域
var y = 10;//全局作用域
{
var z = 10;//块作用域
}
Let和Var的区别
1 var关键字声明的变量没有块作用域,在块{ }内声明的变量可以从块之外进行访问。let关键字声明的变量拥有块作用域,在块{ }内声明的变量无法从块外访问
{
var i = 9;
console.log(i);//在控制台输出9
}
{
Let i = 9;
}
console.log(i);//Uncaught SyntaxError: i is not defined
2 通过var关键字重新声明变量会带来问题,在块中声明变量也将重新声明块外的变量,覆盖块外的变量;通过let关键字重新声明的变量不会重新声明块外的变量,会重新声明一个有块作用域的变量
var x = 10;
// 此处 x 为 10
{
var x = 6;
// 此处 x 为 6
}
// 此处 x 为 6
var x = 10;
// 此处 x 为 10
{
let x = 6;
// 此处 x 为 6
}
// 此处 x 为 10
3 通过var关键字在循环中使用会重新声明循环之外的变量,覆盖循环之外的变量,会保存循环内对变量的改变; 通过let关键字在循环中使用不会重新声明循环之外的变量,会重新声明一个有块作用域的变量,并且不会保存循环内对变量的改变
for (var i = 0; i < 10; i++) {
// 一些语句
setTimeout(function() {
console.log(i);
}, 0);
}
// 输出10个10
for (let i = 0; i < 10; i++) {
// 一些语句
setTimeout(function() {
console.log(i);
}, 0);
}
// 输出 0 1 2 3 4 5 6 7 8 9
4 通过 var 关键词定义的全局变量属于 window 对象;通过 let 关键词定义的全局变量不属于 window 对象
var x = 10;
console.log(window.x);//输出8
let x = 10;
console.log(window.x);//输出undefined
5 var变量能重复声明; let变量不能重复声明
var x = 10;
// 此处 x 为 10
var x = 100;
console.log(x);//输出100
let x = 10;
// 此处 x 为 10
let x = 100;//Uncaught SyntaxError: Identifier 'x' has already been declared
6 let没有变量提升与暂时性死区
用let声明的变量,不存在变量提升。而且要求必须 等let声明语句执行完之后,变量才能使用,不然会报Uncaught ReferenceError错误。
在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”
console.log(a);//Uncaught ReferenceError: Cannot access 'a' before initialization
let a = 'let和var区别';
总结
ES6的let让js真正拥有了块级作用域,也是向这更安全更规范的路走,虽然加了很多约束,但是都是为了让我们更安全的使用和写代码。
本文地址:https://blog.csdn.net/u014481405/article/details/107304945
推荐阅读
-
解析iptables中SNAT和MASQUERADE之间的区别
-
C#中Property和Attribute的区别实例详解
-
Android 中raw和assets文件夹的区别
-
SQL左右连接中的on and和on where的区别
-
详谈js使用in和hasOwnProperty获取对象属性的区别
-
Javascript中类式继承和原型式继承的实现方法和区别之处
-
详解HTML5中div和section以及article的区别
-
老生常谈jquery中detach()和remove()的区别
-
Android MotionEvent中getX()和getRawX()的区别实例详解
-
详谈js中数组(array)和对象(object)的区别