2016-03-07 89 views
1

我已經給出了這個函數來預測輸出。 這是說refrence錯誤,我仍然想知道爲什麼?函數if條件子句

if(function x(){console.log("ABC");}) 
    { 
     x(); 
    } 

希望有人可以對詞法範圍進行一些說明。 在此先感謝。

+1

請參閱http://stackoverflow.com/questions/10069204/function-declarations-inside-if-else-statements – elclanrs

+1

這是一個函數表達式,並沒有在任何範圍內聲明任何變量,但它自己。你真的不應該在if語句的條件下使用它。 – Bergi

+0

@elclanrs:不完全是 – Bergi

回答

5

你有什麼是函數表達式,即使命名爲之一,而你並沒有使用該表達任何東西。您將其命名爲x的事實並不意味着功能x將在範圍內被吊起,因爲表達式不適用。

function foo() {} // function declaration 
(function bar() {}); // named function expression, the() makes it not-a-statement here 

foo(); // ok 
bar(); // doesn't exist 

所以實際上你從來沒有宣稱的功能x,這就是爲什麼當你嘗試調用它不存在。