function jsFun6(){ //函数声明和函数表达式的区别
test1();//函数声明提升,在执行代码之前会先读取函数声明,不会报错
function test1(){//函数声明方式创建函数
alert("测试1");
}
//test2();报错,函数还不存在
console.log(test2)//不会报错,变量提升只是提升变量的声明,并不会把赋值也提升上来,输出undefined
var test2=function(){
alert("测试2");
};//使用函数表达式创建一个匿名函数(实际是以变量test3命名的函数)
test2();//不会报错,以创建函数
var test3=function(){
alert("测试3");
}();//加了括号立即执行
var test4 =12;// !注意看,一旦变量被赋值后,将会输出变量
//函数提升优先级高于变量提升,所以函数先提升,然后变量提升覆盖之前的函数声明,表
//现为变量
function test4(){
alert("测试4");
}
console.log(test4);//12
var test5="test5_1";
(function(){
//js中的变量搜索顺序:找变量时,先找局部变量,如果没有局部变量;再找全局变量。
alert(test5);//此时的test5为局部变量的提升,undefined
var test5="test5_2";
})();
}