javaScript 是由浏览器解释执行的脚本语言,不需要先编译后执行,而是通过浏览器 js 解释器进行解释执行
执行过程分为两步:预编译期和执行期(以代码块为单位,边解释边执行)
预编译期
js解释器会对本代码段内所有的 声明的变量和方法进行处理,将变量和方法提到对应的作用域的最前面,该过程只是对变量进行声明,并不会进行初始化或者赋值(缺省值默认为undefined)
JavaScript 中局部变量只可能通过两种方式声明,一个是作为函数参数,另一个是通过 var 关键字声明。 var 表达式和 function 声明都将会被提升到当前作用域的顶部
编译前
foo(); //alert(1)
function foo(){ //声明式函数
alert(1);
}
foo2(); //undefined is not a function
var foo2 = function(){ //赋值式函数声明,其实是函数表达式
alert("foo2");
};
编译后
var foo2; //缺省值是'undefined'
function foo(){
alert(1);
}
foo();
foo2(); //undefined is not a function
foo2 = function(){
alert('foo2');
};
网友评论