声明提前:
在JavaScript中存在一种预处理机制。在正式执行js程序之前会将所有由var声明的变量和由function声明的函数提前到各自所在作用域的顶部。
①var声明变量的提前只是将声明提前,赋值结构还留在原位置。
console.log(typeof zz);//undefined
var zz = 10;
console.log(typeof zz);//10
//声明提前
//var zz;
//zz = 10;
②function声明函数提前包括对函数名称和函数体的提前。
Goods();// 输出 “ Goods函数被调用”
function Goods(){
console.log(“Goods函数被调用”);
}
如下代码 是提前后的情况:
//Goods函数声明到此处
function Goods(){
console.log(“Goods函数被调用”);
}
Goods();// 输出 “ Goods函数被调用”
变量和函数声明同名问题:
函数和变量的提前优先级为:函数>变量
console.log(goods);//"goods调用成功"
var goods = 100;
function goods(){
console.log("goods调用成功")
}
console.log(goods);//100
如下代码是提前后的结果:
function goods(){
console.log("goods调用成功")
}
var goods;//实际无效
console.log(goods);//"goods调用成功"
goods = 100;//由于js的执行顺序是从上到下的,因此goods函数会被
//变量值覆盖。
console.log(goods);//100