set用于声明变量

1.var 的一个升级版

2.不存在变量提升

  console.log(a);//Uncaught ReferenceError: a is not defined
let a=1;
console.log(a);//1
  console.log(a);//undefined
var a=1;
console.log(a);//1

3.会形成暂时性死区(处于同一个块级作用域里的同名变量在let声明之前使用都会报错)

 let a=2;
console.log(a);//报错
var a=1;
console.log(a);

 4.在同一个块级作用域里面不允许重复声明同一个变量

   if(2>1){
let a=1;
var a=2;
console.log(a)
}
//报错
 if(2>1){
let a=1;
let a=2;
console.log(a)
}//报错
  if(2>1){
let a=1;
a=2;
console.log(a)
}//2

5.块级作用域(不在同一个块里面的变量不会互相影响,①内层变量不能覆盖外层变量;②循环变量不会泄漏为全局变量;③var的for循环会发生值得覆盖,let的for循环会将每一次循环产生的值储存)

 let a=3;
if(2>1){
let a=1;
if(3>2){
let a=2
console.log(a)//2
}
console.log(a);//1
};
console.log(a)//3
 for(var i=0;i<5;i++){
var a=2;
};
console.log(i)//5
     var arr=[];
for(var i=0;i<5;i++){
function f(){
console.log(i)
};
arr.push(f)
};
arr.forEach(function(e){
console.log(e())
})//5,5,5,5,5
    var arr=[];
for(let i=0;i<5;i++){
function f(){
console.log(i)
};
arr.push(f)
};
arr.forEach(function(e){
console.log(e())
})//0,1,2,3,4

const用来声明变量

1.一旦声明,其值不能发生改变

const a=1;
a=2;//报错

2.一旦声明变量就必须赋值

const a;//报错
     

3.对于复合型变量,变量名不指向数据,而是指向数据所在地址,因此const只会保证变量名指向的地址不会变,不会保证数据不变

const obj={};
obj.name='张三';
console.log(obj.name)//'张三'
 const a=[];
a.push('王炜');
console.log(a[0])//王炜

4.可以采用object.freeze方法将对象冻结

const obj=obj.freeze({});
obj.name="王炜";
console.log(obj.name)//报错

5.拥有块级作用域,只在声明的块里面有用

if(true){
const a=1;
};
console.log(a)//Uncaught ReferenceError: a is not defined

最新文章

  1. Maven手动下载jar
  2. JDE 增加合计列
  3. COOKIE和SESSION关系和区别
  4. Beetl2.2使用说明书20151201
  5. Java中几种日志方案
  6. alt text 与 tooltip区别
  7. Eclipse一个打开文件夹目录插件——Open In Explorer
  8. 活动图(Activity Diagram) - 项目分解文章
  9. linuxsocket通信recv研究缓存机制
  10. mint-ui在vue中的使用。
  11. Activity的运行过程
  12. 死磕 java集合之PriorityQueue源码分析
  13. __x__(13)0906第三天__xhtml 的语法规范
  14. 使用JavaScript实现单向链表
  15. Can not issue data manipulation statements with executeQuery()错误解决
  16. 【转】MVC5学习笔记 BindAttribute
  17. Gradle语法基础解析
  18. Vue学习笔记之Nodejs入门
  19. 经典的兔子生兔子问题(C#递归解法)
  20. 转:评估指标MAP

热门文章

  1. Intellij IDEA 使用jrebel运行spring-boot并实现自动编译进行热部署
  2. 在MVC5中使用Ninject 依赖注入
  3. 51Nod 1067 Bash游戏 V2 | 博弈论 Bash
  4. JAVA开发常用工具包
  5. uoj308 【UNR #2】UOJ拯救计划
  6. UIDatePicker---iOS-Apple苹果官方文档翻译
  7. 牛客网刷题(纯java题型 31~60题)
  8. 子div设置margin-top使得父div也跟着向下移动
  9. python爬虫面试总结
  10. hadoop环境搭建编译