1.var 变量声明提升
使用var声明的变量会提升到作用域最前面
console.log(a); //undefined
var a = 1;
console.log(a); //1
等价于
var a;
console.log(a); //undefined
a = 1;
console.log(a); //1
2.函数声明提升
1.函数的提升会放在作用域的最顶部
console.log(test);
var test = function () {
}
等价于
var test;
console.log(test);
test = function () {
}
2.有使用var声明的变量在函数提升之后进行变量提升
var a = 1;
function test() {
}
等价于
function test() {
}
var a;
a = 1;
3.变量名和函数名重复
console.log(say);//[Function:say]
say();//say
function say() { console.log('say') };
//变量名与函数重名,后面的变量声明覆盖前面的函数,say不再是一个函数
var say = 'name';
console.log(say);//name
//say();//error!
4.两种函数定义方式提升的区别
//函数声明
console.log(print);//[Function:print]
print();//print
function print(){console.log('print')}
//函数表达式
console.log(foo);//undefined
foo();//不打印error!不能这样调用
var foo=function(){console.log('foo')};