概述
只在命令行所在的代码块中有效,使用let声明的变量在域解析的时候不会被提升
严格模式
'use strict'
let定义变量没有变量的提升(没有预解释)
console.log(a);//undefined 只声明未定义
var a=1;
console.log(a); //1
console.log(a);
a is not defined
let a=1;
console.log(a);//1
var b=12;
var b=13;
function b(){
console.log(b);
}
console.log(b);//13
b()
//报错
let b=12;
let b=13;
function b(){
console.log(b)
}
console.log(b);
报错:Identifier 'b' has already been declared
注意:let定义得变量不能重复定义(不管函数还是let定义得变量都不可以得)
console.log(A);
报错:A未定义
let A=10;
let A=12;
//报错'A' has already been declared
问题:上面为什么包下面错误呢?
虽然不进行预解释,但是代码执行前上来也是先将定义得变量提前过滤一遍的,一旦
发现不合法就直接报错的,代码也不会执行的
const 定义的是静态变量,是不能修改的,且必须赋值
不赋值就会报错:Missing initializer in const declaration
const g=10;
g=20; 不可以修改Assignment to constant variable
注意:不可以重复声明的
const g=20;//Identifier 'g' has already declared
let a=1;
const a=2;
//Identifier 'a' has already declared
注意:不管是动态变量还是静态变量,都是不可以重复声明的
let a=1;
{
const a=2;
}
这样就不会报错了,里面的是私有作用域,不是同一个a
块级作用域
就是大括号,大括号包起来的都属于块级作用域
{} 是一个私有作用域,块级作用域
let a=10;
if(a){
console.log(a);
//报错, a is not undefined
let a=12;
console.log(a);若放在下面就不报错
}
注意:
let oLis=document.getElementsByTagName("li");
for(var i=0;i<oLis.length;i++){
oLis[i].onclick=function(){
console.log(i);
//这样输出的都是4
}
}
for(let i=0;i<oLis.length;i++){
oLis[i].onclick=function(){
console.log(i);
//这样输出就都是正确的
}
}
let a=0;
function fn(){
console.log(a);//报错
let a=0;
}
let a=0;
function fn(){
console.log(a);//不报错,输出0;
}
自执行函数
{
let a=100;
console.log(a);
}
let obj={};
//注意:eval将字符串转为对象的时候,一定要加上()
参考博客:https://blog.csdn.net/hdchangchang/article/details/78265351
最后
以上就是大气小蘑菇为你收集整理的let和const总结的全部内容,希望文章能够帮你解决let和const总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复