js预解释是代码执行之前就干了些事,有两类预解释,带var 和带function,具体看看
- 带var关键字预解释
alert(n);//弹出undefined
var n = 10; - 带function关键字预解释
fn();//弹出hello
function fn(){
alert('hello');
}
<b>它们为什么会这样呢?</b>
- 原因是javascript中有声明和定义这两个概念,我们通常用var关键来声明变量,用function关键字来定义函数,在预解释时,function关键字声明和定义函数是同时执行的,而var它只能声明变量,并不具备定义的功能。
<b>在看一个无节操的例子:</b>
alert(n);//undefined
fn(); //hello
if(false) {
var n = 10;
function fn(){
alert('hello');
}
}
第一行代码执行会弹出undefined,第二行代码执行会弹出hello;是因为n和fn在代码执行前被预解释了,即使if条件判断为false,执着的浏览器引擎也会将带var关键字声明的变量n和带function关键定义的fn扫描到。
- 预解释忽略重新声明,不忽略重新定义
alert(n);//undefiend
var n = 10;
var n = 9;
var n;
alert(n);//9