变量提升
变量提升即将变量声明提升到它所在作用域最前面,而且仅仅是提升变量,不会提升所赋的值
console.log(a) ; //打印结果undefined
var a = 123;
执行流程
var a ; //变量提升
console.log(a) //undefined
a=123 //赋的值并没有提升
作用域
在 ES6 之前,ES 的作用域只有两种:全局作用域和函数作用域
全局作用域:
全局作用域中的对象在代码中的任何地方都能访问,其生命周期伴随着页面的生命周期。
函数作用域:
函数作用域就是在函数内部定义的变量或者函数,并且定义的变量或者函数只能在函数内部被访问。函数执行结束之后,函数内部定义的变量会被销毁。
但是ES6之后,引入了let和const之后,js才算是拥有了块级作用域,块级作用域由{}组成,let和const定义的变量常量只在块级作用域内生效
题目
function foo(){
var a = 1
let b = 2
{
let b = 3
var c = 4
let d = 5
console.log(a)
console.log(b)
}
console.log(b)
console.log(c)
console.log(d)
}
foo()
答案:
a=1 b=3 b=2 c=4 d=ReferenceError
(let和const在块级作用域中生效,块级作用域之外是访问不到块级作用域里面的)
网友评论