2017-05-06 73 views
1

表達式的簡單定義是「可以解析爲值的東西」。 語句的簡單定義是「可執行的代碼塊」。函數聲明(語句)在技術上也是函數表達式嗎?

考慮到這一點,因爲下面的函數可以解析爲6的值,那麼它是否也是表達式而不是語句,或者兩者都有?

function ii() { 
return 6; 
} 
ii(); 
+1

可能的重複http://stackoverflow.com/questions/1013385/what-is-the-difference-between-a-function-expression-vs-declaration-in-javascrip –

+0

可能的重複[有什麼區別在JavaScript中的函數表達式與聲明之間?](http://stackoverflow.com/questions/1013385/what-is-the-difference-between-a-function-expression-vs-declaration-in-javascrip) –

+0

函數不解析爲6值。你爲什麼這麼說?當你調用它時你得到的值是6,但函數聲明不會產生一個值。 –

回答

1

通過自己的引用,沒有。該函數本身並不解決任何問題,它只是返回一個已解決的值。這只是一個聲明。

您正在定義該功能。這使得它成爲一個聲明。是的,你可以說調用函數「解析」它到輸出,但它只觸發輸出。

值更像是一個表達式。它不可執行,它只是

吸氣既是表達和陳述集於一身:

Object.defineProperty(window, "ii", { get: function() { return 6 }}); 
// Returns '6' 
ii; 

ii = 7; 
// Logs '6' because setting 'ii' does not change the resolution function. 
console.log(ii); 
+0

謝謝你的回答。所以通過將上述函數分配給一個變量,它就變成了一個函數表達式?由於該變量將保存該函數,函數作爲一個值並使其成爲表達式? – Bail3y

+0

@Ippickel我把文本平滑一點,好點? – imaxwill

2

函數聲明定義了一個函數應該做的,如下:

function ii() { 
    return 6; 
} 

當該函數被調用爲在下面,它變成函數表達式:

if (ii()) { 
    console.log("true"); 
} 
else 
{ 
    console.log("false"); 
} 

你也可以有一個函數基於聲明,表達式如下:

(function iii() { 
    console.log(3); 
    }() 
) 

以下表示另一種表達的,對於一個值被指定的函數聲明:

var a = function iv() { 
    return 5; 
} 

關於此主題的一個有趣的讀取是here