小编自身是前端出身,最近在做我的项目的时候,有一些前端性能实现起来越来越吃力,特地是在面对VUE的时候,一些新语法基本不意识。于是乎,就筹备利用还有的一点闲暇工夫,认真学习一下JavaScript中的一些新个性,接下来小编将陆续更新文章,心愿能从我的文章中有一些属于本人播种。大家也能够关注我的微信公众号,蜗牛全栈。
每一门语言都有本人变量申明,之前版本的js曾经有变量申明的关键字var了,为什么还要更新,增加新关键字和个性呢?
关键字let
1、含意不同
var a = 5console.log(a) // 变量b = 6console.log(b); // window下的属性
2、是否能够反复申明
// var 能够反复申明变量,后申明的替换先申明的值var a = 5var a = 6console.log(a) // 6// let 不容许反复申明变量,反复申明变量会报错let a = 5let a = 6console.log(a) // 报错:Identifier 'a' has already been declared
3、块级作用域
for(var i=0;i<3;i++){ console.log(i,"---循环内"); // 0 1 2}console.log(i,"---循环外"); // 3for(let i=0;i<3;i++){ console.log(i,"---循环内"); // 0 1 2}console.log(i,"---循环外"); // 报错:i is not definedif(false){ var a = 5}console.log(a); // undefindif(false){ let a = 5}console.log(a); //报错:a is not defined
4、if后只有一行语句的时候
if(true) var a = 6if(true) let a = 6 // 报错
5、同步和异步
for(var i=0;i<3;i++){ setTimeout(function(){ // 异步操作 console.log(i) // 3 3 3 })}for(let i=0;i<3;i++){ setTimeout(function(){ // 异步操作 console.log(i) // 0 1 2 })}
关键字const
1、根本数据类型申明之后不可扭转(es5中根本数据类型有五种:string、number、null undefind、bool)
const a = 5a = 6 //报错:Error: "a" is read-only
2、根本数据类型和援用数据类型存储关系
注:在es5中援用数据类型次要有Array和Object
const obj = { name:"lilei", age:34}console.log(obj) // {name: "lilei", age: 34}obj.school = "imooc"console.log(obj) //{name: "lilei", age: 34, school: "imooc"}// 援用数据中的内存地址没变,只是在堆内存中内容产生变动// 如果不心愿对象内容变动,可采纳Object.freeze()函数const obj = { name:"lilei", age:34, skill:{ name:"code", year:12 }}Object.freeze(obj) // 解冻对象console.log(obj) // {name: "lilei", age: 34}obj.school = "imooc"console.log(obj) // {name: "lilei", age: 34}obj.skill.name = "skate" // {name:"lilei",age:34,skill:{name:"code",year:12}}Object.freeze(obj,obj.skill) // 嵌套属性也须要解冻的时候,须要手动增加