(function())();
結果: undefined 10
**等同於下面
var a = undefined; //定義全域性變數
(function())();
分析:
1.在產生乙個作用域的時候,會預編譯一次裡面的變數,其中的動作是將所有的變數名,函式名,提前定義,然後在賦予當前的變數的所在作用域,執行。
2.變數名的定義會覆蓋函式名,可是函式名(見下面)
var a;
function a()
a(); //alert(12)
a = 10;
a(); //uncaught typeerror: a is not a function
a的定義,function的定義 換個順序
(function()
alert(a);
alert(a());//uncaught typeerror: a is not a function
})();
//分析:a() 的函式名並不會覆蓋變數名
function a()
(function())();
js變數作用域 變數提公升
1 js作用域 在es5中,js只有兩種形式的作用域 全域性作用域和函式作用域,在es6中,新增了乙個塊級作用域 最近的大括號涵蓋的範圍 但是僅限於let方式申明的變數。2 變數宣告 1 var x 變數宣告 2var x 1 變數宣告並賦值 3 x 1 定義全域性變數並賦值 3 函式宣告 func...
變數提公升 作用域
console.log a undefined console.log window.a undefined console.log a in window true 在變數提公升階段,在全域性作用域中宣告了乙個變數a,此時就已經把a當做屬性賦值給window了,只不過此時還沒有給a賦值,預設值un...
JS變數提公升,函式宣告提公升及變數作用域的理解
在一般情況下,js 都是自上而下執行的,對於同乙個變數,可以通過如下方式來修改 var a 1 a 2 console.log a 2 a function console.log a function console.log a var a 1 console.log b var b functi...