来看个例子:

var a = 1;
function foo(){
console.log(a);
var a = 2;
}
foo(); //undefined 为什么是未定义呢?

实际上它是长这样的:

var a = 1;
function foo(){
var a;
console.log(a);
a = 2;
}
foo(); //undefined 变量声明被提升到了 当前foo函数内部作用域的最顶端

再来看个例子(加深理解):

console.log(a); //function a() {} 输出了a函数 why?
var a=1;
function a() {}

分析一下解析过程:

var a;
function a() {}
console.log(a); //function a() {} 函数声明被提升到了变量a下面 此时的变量a 因为同名 被a函数覆盖
a=1;// 如果在下一行打印输出变量a 将输出 1

函数声明 优先于 变量声明(js中,函数是第一等公民)

foo();// 1

var foo = function () {
console.log('2');
}

function foo() {
console.log('1');
}

分析代码:

function foo() {
console.log('1');
}
var foo;
foo();// 1
foo = function () {
console.log('2');
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Captcha Code