数据类型let

2019-12-24  本文已影响0人  元宇宙编程

声明方式:
let:
1、只要后面有let声明,不管使用什么引用foo变量都会报错
2、ES6规范明确规定,如果代码块出现let、const声明,那么一旦形成了封闭作用域,在声明之前使用就会报错
3、不允许全局访问局部声明的变量/对象
const:
1、使用它声明之后,必须在声明的时候同时赋值
2、声明之后“不允许”更改存在的值,简而言之就是不允许修改内存地址

var str = "Hello World~!";
let str = "World~!";
console.log(str);

结果:Uncaught SyntaxError: Identifier 'str' has already been declared
解释:不能重复声明变量

结果: 10
Uncaught ReferenceError: b is not defined
解释:{}对于ES6是闭包,对于ES5不是闭包

 var arr = [];
 for(var i = 0;i < 10;i++){//i++ 10
    arr[i] = function(){
    console.log(i);//这个console.log()这句代码在ES5中是没 
   有执行的
   }
 }
 arr[6]();//在调用时,才去获取 i ,i此时已经是10

结果:10
解释:console.log()这句代码在ES5中是没有执行的

  var arr = [];
  for(let i = 0;i < 8;i++){//i++ 10
    arr[i] = function(){
    console.log(i);
   }
 }
arr[5]();//

结果:5
解释:console.log()这句代码在ES6中是是执行的

console.log(foo);
var foo = 2;

结果: undefined
解释: 这里会发生变量提升,也就是我们JS运行的时候,变量foo已经存在了,只是说没有赋值

console.log(bar);
let bar = 10;

结果: Cannot access 'bar' before initialization
解释: let不存在变量提升,所以在用到的时候,会抛出一个错误“bar is not defined”

var foo = 100;
if(true){
foo = "abc";
//在let声明变量"foo"之前,都属于变量“foo”的“死区”
 let foo;
}

结果:Cannot access 'foo' before initialization
解释:ES6规范明确规定,如果代码块出现let、const声明,那么一旦形成了封闭作用域,在声明之前使用就会报错

//typeof检测变量类型
 typeof foo;
 let foo;

结果:Cannot access 'foo' before initialization
解释:只要后面有let声明,不管使用什么引用foo变量都会报错

 function demo(num){
     let num;
}

结果:Identifier 'num' has already been declared
解释: 这里使用let声明,同样属于重复声明变量,所
以会报错

如果需要更多帮助,请关注公众号
上一篇 下一篇

猜你喜欢

热点阅读