簡體   English   中英

函數值到底是什么?

[英]What precisely is a function value?

在JavaScript(ECMAScript 5)中,函數是有價的(被告知它們是“一流的函數”)。

這使我們可以將它們用作表達式(表達式是產生值的所有內容,並且可以包含其他表達式: var exp0 = (exp1) + exp2 - exp3.function();是語法正確的語句)。

在上面的代碼中,有8個表達式:exp0,exp1,(exp1),exp2,(exp1)+ exp2,exp3,exp3.function()和(exp1)+ exp2-exp3.function()。


因為函數可以用作表達式,所以以下代碼是正確的:

var my_function_0 = function a() {}是一個命名函數表達式。

以下代碼也是正確的:

var my_function_1 = function() {}`是匿名函數表達式。

兩者都是有價值的,都是價值。


現在,考慮以下代碼:

function requiredIdentifier() {}

它不是“命名或匿名函數表達式”,而是函數聲明。


我的問題是:

聲明的函數是否具有/產生值?

這個問題等於這個問題: 聲明的函數是表達式嗎? (即使它不是命名或匿名函數表達式?!)

聲明的函數是否具有/產生值?

是。 無論使用什么語法來創建函數,函數都是可調用對象(即,它實現了使其可調用的內部接口):

function a() {}
var b = function() {}
var c = (new Function()) // or some other expression that returns a function

所有變量abc具有函數值。

語法之間的區別僅在於創建值以及是否/何時將其綁定到變量時。 有關這些詳細信息,請參見var functionName = function(){}與function functionName(){}

函數聲明是語句,而不是表達式。 由於語句不能在表達式中使用,因此詢問其值是毫無意義的,因為無法使用該值。

但是,函數聲明的語法與命名函數表達式的語法相同。 因此,如果在需要表達式的任何地方使用它,它將被視為命名函數表達式,並且值將是函數。

例如:

(function requiredIdentifier() {})

是包含命名函數表達式而不是函數聲明的括號表達式。 它的值是定義的功能。

好吧,如果您運行函數requiredIdentifier()則返回值是undefined ,而undefined實際上是javascript(ecma腳本)中的原始數據類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM