test();
var test = 1;
function test(){
alert(2);
}
test();
对于这段代码的解析
Js 的执行过程为:
Step1, step2 先把变量定义和函数定义放到相应的内部表里,不进行任何变量赋值和函数执行操作(var test = 1, 这个时候只进行var test, 不进行 =1, 这个过程为预解析)。
然后step3, 执行第一句test(); 这个时候查询变量表和函数表,有这个变量指向相应的函数,正确执行。
然后step4, 执行var test =1;这句话的 test=1赋值操作,起到的作用就是重新分配变量表里test的指向,重新指向data 1
Step5, 在执行test();的时候, test已经不是一个函数了,到这一步的时候才出错。Error:test() is not a function
如果不给test 赋值:
test();
var test; // 只声明
function test(){
alert(2);
}
test();
两个都能正确执行,因为没有执行step4, test还是指向function.
上边两个例子足以说明在执行内部有变量指向function, 那是不是真的是变量执行一个function呢?下边简单证实一下
不声明test:
test();
function test(){
alert(2);
}
test();
都能正确执行,那谁指向test()function?答案就是window
等价于:
Window.test();
function test(){
alert(2);
}
Window.test();
再给个测试你是否真的理解运行机制的一段代码:
var k = 100;
var obj = function(){
var x = k*2;
var k=200;
var y = k/2;
alert(x);
alert(y);
};
obj();