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声明的变量绑定了自己所在的作用域,互不影响.

浙公网安备 33010602011771号