再談js的作用域
面試中遇到的題目:
題目一:
var word = "hello world";
(function(){
alert(word);
var word = "hello test";
})();
效果 http:///keleyi/phtml/js/1.htm
題目二:
var word ="hello world";
(function(){
alert(world);
function world(){
console.log("hello test");
}
})()
效果 http:///keleyi/phtml/js/1b.htm
這兩段代碼會發生什麼?console一下,你就知道。
局部變量的優先級大於全局變量。
js編譯機制
js分為編譯期和運行期,編譯的過程中為var聲明的變量和*function*分配內存,運行期順序執行。
var 聲明的變量,只有變量聲明提前。變量的初始化還在原來的位置。
使用函數聲明語句的話,函數名稱和函數體均提前。(函數聲明語句中,函數名是一個變量名,指向函數體)