先看代码
console.log( fn )
var fn = 1
function fn(){}
console.log( fn )
console.log(i)
for(var i=0; i< 3; i++){
console.log(i)
}
var a = 1
function fn(){
a = 2
console.log(a)
var a = 3
console.log(a)
}
fn()
console.log(a)
解析
以上代码等同于
var fn
function fn(){}
console.log( fn )
fn = 1
console.log( fn )
var i
console.log(i)
for(i=0; i< 3; i++){
console.log(i)
}
var a
function fn(){
var a
a = 2
console.log(a)
a = 3
console.log(a)
}
a = 1
fn()
console.log(a)
在进入一个执行环境后,先把 var 和 function 声明的变量前置, 再去顺序执行代码
是 var 声明在前还是 function 声明的在前? who care, 按先来后到,同名覆盖。当然如果一个变量已经有值,再 var 是无效的
var fn
function fn(){}
console.log(fn) //function
function fn(){}
var fn //已经声明过 fn, 再 var 无效,并不会重置为 undefined
console.log(fn) //function
网友评论