先看这么一句话:
“在JS预编译期,仅仅是对函数的名称、函数内部的各种标识符进行检索,并建立索引”
根据上述,我们看看示例:
示例1:
function test6_2() {
var a = 123;
(function() {
alert(a); //undefined 预编译时被a标识符替换,故undefined
var a = 1.11111;
alert(a); //1.11111
})();
}
示例2:
function test6_3() {
var a = 123;
(function() {
// function a() {alert("function")} 预编译时,被函数a替换,疑问:在函数a后面继续声明有a变量,不过这个变量似乎优先级不够?
alert(a);
var a = "abc";
function a() {alert("function")}
var a = 1.11111;
alert(a); // 1.11111
})();
}
示例3:
function test6_4() {
// function a() {alert(1)} 预编译时,被函数f替换,疑问:在函数f后面继续声明有标识符f,不过这个变量似乎优先级不够?
alert(f);
function f() {alert(1)}
var f = function() {alert(2)};
}
示例4:
function test6() {
function f() {
alert(1);
}
f(); //4
var f = new Function("alert(2)");
f(); //2
var f = function() {alert(3)};
f(); //3
function f() {
alert(4);
}
f(); //3
var f = new Function("alert(5)");
f(); //5
var f = function() {alert(6)};
f(); //6
}
备注:继续学习,后期来解答这个疑问!