ES6
代码在浏览器环境运行!代码在浏览器环境运行!代码在浏览器环境运行!
我用的google!!!
变量声明 let
最最最基本用法
let a = 11;
alert(a); // 11
let与var的区别
//声明后未初始化,输出相同.
var a;
let b;
console.log(a); // undefined
console.log(b); // undefined
使用在声明前的异同
console.log(a); //输出undefined ==> 变量提升
var a= 'test var';
console.log(b); //直接报错:ReferenceError: b is not defined
let b = 'test let';
重复声明问题 在相同的函数或块作用域内重新声明同一个变量会引发SyntaxError
var a =5;
var a =12;
console.log(a);//必须注释下面的其中一个let声明
let b = 3;
let b = 666; //报错 Identifier 'b' has already been declared
console.log(b)
作用域问题
除了全局作用域和函数作用域,es6新增了块级作用域,即用{ }包裹的代码块。
块级作用域
内层变量和外层变量的值互不影响。内层无法读取外层,外层无法读取内层。
作用域问题
问题1: 如果是let声明的初始化表达式 在for循环外 访问i会报错 如果var声明的就不会报错
for(let i=0; i<10; i++){
}
//报错
alert(i);
问题2: 如果是let声明的初始化表达式 在for循环外 访问i会报错 如果var声明的就不会报错
{
console.log(a); //报错
{let a=12;}
console.log(a) //报错
}
问题3: 事件中的索引问题 ==>简化内部函数代码
工作原理是因为(匿名)内部函数的3个实例引用了变量i的3个不同实例。
<body>
<script>
var aBtn=document.querySelectorAll('input');
for(let i=0; i<aBtn.length; i++){
aBtn[i].onclick=function(){
alert(i); //弹出对应的 索引
//如果换成var声明 就会弹出 aBtn.length ==> 3
};
}
</script>
</head>
<body>
<input type="button" value="aaa">
<input type="button" value="bbb">
<input type="button" value="ccc">
</body>
问题4:在程序或者函数的顶层,let并不会像var一样在全局对象上创造一个属性
var x = 'global';
let y = 'global';
console.log(this.x); // "global"
console.log(this.y); // undefined
const 常量
特性
- 声明时就需要赋值,否则报错;一旦声明不可重新赋值,否则报错;
- 块级作用域
- 不存在变量提升;
- 存在暂时性死区;
- 声明引用类型常量时,const保存的是地址,常量中的属性还是可以变的;
块级作用域
if(true){
const a=12;
}
//报错 常量的作用域
alert(a);
重复赋值
const a=12;
a=5;
alert(a); // TypeError:Assignment to constant variable.
未初始化就使用
const a;
alert(a); // Uncaught SyntaxError: Missing initializer in const declaration
网友评论