JS代码是按块被引擎预编译和解释执行的,所谓块就是标签分割的代码段。下面两个标签分别代表两个代码块。
var a = 1;
function f() {
alert(a);
}
由于JS按块执行,在一个JS块中调用后面的块中声明的变量或者函数会报语法错误。
例
alert(a); //提示语法错误,变量a没定义,对象f找不到
f();
var a = 1;
function f() {
alert(1);
}
虽说JS按块执行,但是不同的块都属于同一个全局作用域,即块之间的变量和函数是可以共享的。
我们可以借助事件机制改变JS执行顺序。
当文档流完全被加载完毕,再次访问就不会出现语法错误,比如将访问第二个代码块中的变量和函数的代码放在页面初始化事件函数中,就不会提示语法错误。、
window.onload = function() { //页面初始化(加载)完毕之后才执行页面初始化事件处理函数
alert(a);
f();
}
var a = 1;
function f() {
alert(a+a);
}
//除了页面初始化事件外,还可以通过各种交互事件如鼠标事件、键盘事件、时钟触发等改变JS代码执行顺序。