我们晓得,关于一切的变量,不管在函数体的什么处所声明,都邑在背景被提拔到函数体顶部。
这个划定规矩关于函数一样实用,其缘由在于函数只是分配给变量的对象。唯一须要引发注重的处所在于当实用函数声明时,函数定义也会被提拔,而不仅仅是函数声明被提拔。看下面的代码:
function test() {
console.log(typeof foo); // "function"
console.log(typeof bar); // "undefined"
function foo() {
}
var bar = function () {
};
}
test();
test()
函数中的foo
和bar
的声明被提拔到了顶部;同时,须要注重的是:foo
和bar
的区分在于前者的定义得到了提拔,而后者的定义没有提拔,这也就是console.log(typeof bar)
输出undefined
的缘由。
所以,须要记着的是:函数表达式仅仅是变量被提拔,而函数的完成没有被提拔。
上面的代码中,背景剖析的代码类似于:
function test() {
var bar;
function foo() {
}
console.log(typeof foo); // "function"
console.log(typeof bar); // "undefined"
var bar = function () {
};
}
test();