1.var 关键字
1-1 在函数作用域或者全局作用域来用关键字var来声明变量,但是如论在哪里声明,都会被当成在当前作用域顶部声明的变量,这就是我们说的变量提升
1-2他真正在浏览器运行过程是
function getValue(condition){
var value;
if(condition){
value='blue';
return value;
}else{
return null;
}
}
2.let关键字
主要知识点:
2-1 用于函数内部内,在字符{和}之前
2-2 不存在变量提升(因为不存在变量提升,变量设置在函数的顶部)
2-3 同一块级不能重复命名
2-4 存在于块级作用域中
为了解决关键字变量var 带来的变量提升问题,es6引进了let
块级作用域用于声明在指定块的作用域之外的无法访问的变量。块级作用域(亦成为词法作用域)存在于
●函数内部内
●块中(字符{和}之间的区域)
let的声明用法和var相同。用let代替var来声明变量,就可以把变量的作用域限制在当前代码块中,因为let声明不会被提升,因此开发者通常将let声明放在封闭代码块的顶部,以便整个代码块都可以访问
2-1-1 let关键字声明变量,不会升至函数顶部,执行流离开if语块,value立刻被销毁,
如果condition 为false,则永远不会声明并初始化value
eg:
2--1-2 禁止重声明
假设作用域已存在某个标识符,此时再使用let关键字声明他就会抛出错误
在这个事例中同一作用域,变量count被声明了两次,所以会报错
eg
var count=0;
let count=0;
//Identifier 'count' has already been declared (标识符已存在)
但如果在当前作用域嵌套另一个作用域便可在内嵌的作用域中用let声明同名变量,
因为此处let在if块内声明新变量count,因此不会抛出错误
示例代码如下
var count=0;
if(condition){
//不会抛出错误
let count=40;
}
3.const声明
主要知识点
1. 跟let一样适用于块级作用域内
2.同一块级作用域不能重复命名
3.常量必须初始化
4.常量一旦声明,不能让修改绑定,但是可以修改值
es6引进const关键字。使用const关键字声明常量,值一旦声明不可更改。因此通过
counst声明的常量必须进行初始化。
eg:
const maxItems=30;
const name;//Missing initializer in const declaration 常量声明缺少初始化
3-1-1sconst和let声明的都是块级作用域标识符,所以常量只在当前代码块有效,一旦执行到块外会立即执行销毁。常量也不会被提升到作用域顶部
eg:
if(condition){
const maxItems=5;
}
console.log(maxItems)//(此处不能访问maxItems)报错condition is not defined
3-1-2 与let相似不能重复声明
var message='Hello';
let age=25;
const message='Goodbye';//此处会报错'message' has already been declared
const age=20;//此处会报错 'age' has already been declared
3-1-3 const 声明不能修改绑定,但是可以修改值
const person = {
name: 'zuojiaojiao'
}
person.name = 'jiaojiao1'//可以修改值
console.log(person)
person = {
}//此处会报错 Assignment to constant variable.
function getValue(contiue) {
if (contiue) {
console.log(typeof value);//抛出错误值未被定义
let value = 'blue';
}
console.log(typeof value)//undefined
}
getValue(true);
网友评论