作用域与变量提升
作用域:对某个范围产生作用,外部不能访问内部变量,但内部可以访问外部变量
var i = 0
function outer() {
console.log(i)//0
}
function outer() {
var i = 0
console.log(i)//0
}
console.log(i)//报错,外部不可访问内部
变量提升:变量的声明被自动移动到了函数或全局代码的最顶上。函数声明可以写在任何地方,但是不能不写,不写报错
function outer() {
console.log(i)//报错,未被声明,
}
function outer() {
console.log(i)//undefined变量提升是把声明提至最前面,即var i但是赋值=0还在原来位置
var i = 0
}
function outer() {
var i = 0
console.log(i)//0
}
注意:var、function、function *和let、const、class的的提升却并不相同
//声明的函数名和变量一致的情况下,分为两种
//一:函数申明。function foo(){}这种形式,函数优先
console.log(foo)//function foo(){}
var foo = 'aa'
function foo(){}
//二:函数表达式。var foo=function(){}这种形式
console.log(foo)//undefined
var foo = 'aa'
var foo = function(){}
浙公网安备 33010602011771号