javascript - var和function關鍵字
仅有的幸福
仅有的幸福 2017-05-19 10:29:08
0
5
500

var a = 1;

function a()
{
    console.log(a);
};
a();

這幾行JS程式碼運行會報錯,但原因是什麼?求大神講解

仅有的幸福
仅有的幸福

全部回覆(5)
过去多啦不再A梦

函數做為javascript的第一個公民,所以在此處存在函數提升。上述程式碼最後的實現和以下效果是一樣的

function a()
{
    console.log(a);
};
var a = 1;
a();

這樣會導致原有的函數名被覆蓋。

Ty80

標識符重複了啊 你已經給a宣告成一個變數了

小葫芦

先說一點 js 看到 var a = 1 是 分兩步驟來解析,第一 把var a 提升到目前作用域頂端,然後依序往下解析,知道a = 1 開始賦值

這就是 變數 跟 函數重名的問題,簡單來說 js引擎解析順序是這樣的
1.變數個函數宣告提升到目前作用域頂端 → var a ↑ 和 `function a()
{

console.log(a);

}`
2.然後解析剩下的程式碼 `a=1;
a()`,

刘奇

這是因為函數宣告會提前

var a = 1;
function a()
{
    console.log(a);
};
a();

1)函數宣告會置頂
2)變數宣告也會置頂
3)函數宣告比變數宣告更置頂:(函數在變數上方)
4)變數和賦值語句一起書寫,在js引擎解析時,會將其拆成聲明和賦值2部分,聲明置頂,賦值保留在原來位置
5)聲明過的變數不會重複聲明

就會相當於下面的這個樣子

var a = function ()
{
    console.log(a);
};
var a = 1;

a();

希望幫你~

漂亮男人

很多人都提到了是變數提升的問題,但解釋的不太對。 var提升是拆開來提升的,函數是整個提升的。 fYI

所以應該是這個樣子:

var a;
function a ()
{
    console.log(a);
};
a = 1;
a();
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板