变量声明应该在作用域的顶端,但是赋值没有。
命名函数表达式会提升变量名,而不是函数名或者函数体。
函数声明会提升变量名和函数体
function example(){
var declaredButAssigned;
//如下输出 declaredButNotAssigned 未定义
console.log(declaredButNotAssigned)
declaredButNotAssigned = true
}
匿名表达式能提升他们的变量名,但不能提升函数赋值。
function example(){
console.log(anonymous); //未定义
anonymous();//类型错误
var anonymous = function(){
console.log('anonymous function expression');
}
}
命名函数表达式会提升变量名,而不是函数名或者函数体。
function example(){
console.log(AAA);// undefined
AAA();//TypeError AAA is not a function
BBB();//ReferenceError BBB is not define
var AAA = function BBB(){console.log('Hi~~')};
}
//当变量名同函数名称一样
function example2(){
console.log(AAA);// undefined
AAA();//TypeError
var AAA = function named(){console.log('Hello');};
}
函数声明会提升变量名和函数体
function example(){
AAA();
function AAA(){
console.log('Hi~~');
}
}
1:8 And God called the firmament Heaven.And the evening and the morning were the second day.