es6声明对象以及作用域与es5对比

es6声明变量:

let x=1;//声明一个变量

const y=2;//声明一个只读常量,声明时必须赋值,之后值不可修改

es5声明变量:

var z=3;//声明一个变量

区别:

  let不存在变量提升,而var存在

ps:变量提升---先解析代码,获取所有声明的变量,然后代码自上而下依次运行将变量提升到自身所在作用域的头部,这将导致脚本还未执行,而变量却存在,只不过变量的值为undefined。

var num=2;
function fun() {
  console.log(num);//undefined    
  if(false){
     var num=3;
    console.log(num);//代码不执行 
  }  
}

从上面代码可以看出,即使if语句不执行,但是num却依然声明了。

 

作用域:ps:变量能够起作用的范围

   在es5中只有全局作用域和函数作用域,而es6中新增了一个块级作用域

var arr="love";//全局作用域下的全局变量
function foo() {
 var arr="you";//函数作用域下的局部变量
}
foo();

 

块级作用域用 { } 包含

{
   let num=.....;//块级作用域写法
    ........
}

 

*.在某个作用域中用let声明局部变量时,该作用域会形成封闭作用域,即在变量声明之前,该变量不可使用,并且不允许在相同的作用域下重复声明同一个变量.

var tmp="234";
{
    tmp=345;//报错
    let tmp="567";//在声明变量之前不可使用,区域已封闭
}

 

let garde=88;
let grade=79;//报错
let num=110;
{
   let num=99;
   console.log(num);//99
}
console.log(num);//110

从上面的代码可以看出用let声明的变量绑定了自己所在的作用域,互不影响.

 

posted @ 2018-11-12 14:47  我忘了  阅读(670)  评论(0)    收藏  举报