本博客用于个人学习使用,资料可能来源于网络,未注明出处,敬请原谅。如有侵权,请联系博主进行删除。
变量提升
{
var a = 10;
console.log(a);//10
}
console.log(a);//10
//在执行前会先进行变量提升,提升到全局作用域最顶层,实际执行代码如下:
var a = undefined;
{
a = 10;
console.log(a);
}
console.log(a);
函数提升
foo()
function foo() {
console.log(a)
var a = 99
console.log(a)
}
//这里的函数是先调用后声明,在执行之前会进行变量提升和函数提升,实际执行代码如下:
function foo() {
var a = undefined
console.log(a) //undefined
var a = 99
console.log(a) //99
}
foo()
用var声明的变量都可以用let来声明,我们在写代码的时候要尽量使用let来声明变量。let声明的变量,有块级作用域,我们写的for() while() 等等这些都是块级作用域。
{
let b = 100
console.log(b) //100
}
console.log(b) //报错,let声明的变量存在暂时性死区
{
console.log(c) //报错,let声明的变量不存在变量提升
let c = 'my name is lucy'
}
{
const f = 'my name is Bob'
}
console.log(f) // 报错,const声明的变量也存在暂时性死区
const用于声明一个常量,声明的同时必须马上赋值,const不能再赋值
const c //SyntaxError: Missing initializer in const declaration
const e = 20
e = 30 //Uncaught TypeError: Assignment to constant variable
const虽然是常量,不允许修改默认赋值,但如果定义的是对象,那么是允许修改对象内部的属性、新增属性、删除属性的。但是重新给一个数据类型是不可以的,因为内存地址发生了改变。
const person={
age:22
}
person.age = 23
console.log(person) // { age:23 }
person.sex = 'female'
console.log(person) // { age:23, sex: 'female }
delete person.age
console.log(person) // { sex: 'female' }
person = {} // 报错
person = [] // 报错
const和let的区别:
相同:const和let都不存在变量提升,都不能重复声明,都存在暂时性死区
不同点:const声明的常量不能再赋值,let声明的变量可以重复赋值