在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/HTML/ javascript基礎(chǔ)語(yǔ)法(表達(dá)式),見(jiàn)解。

javascript基礎(chǔ)語(yǔ)法(表達(dá)式),見(jiàn)解。

進(jìn)入誤區(qū),請(qǐng)幫忙解答

函數(shù)調(diào)用表達(dá)式
function fn() {}
fn() 這函數(shù)調(diào)用表達(dá)式會(huì)返回一個(gè)值所有是一個(gè)表達(dá)式。當(dāng)函數(shù)fn中return后面沒(méi)有值的時(shí)候,返回的就是undefined,有值則返回的就是return后面的值,是否可以這樣理解?

函數(shù)表達(dá)式
var a = function() {};
function() {} 單獨(dú)應(yīng)該是一個(gè)函數(shù)聲明吧。
當(dāng)賦值變量a時(shí),a = function() {} 就有一個(gè)表達(dá)式。如果這樣的話,a = function() {}應(yīng)該會(huì)返回一個(gè)值吧,如果是這樣的話,請(qǐng)問(wèn)值是多少?

原是表達(dá)式
var b = 1; 在這1是一個(gè)表達(dá)式,b=1也是一個(gè)表達(dá)式。
不解的是 函數(shù)表達(dá)式以上為例。function() {} 就不是表達(dá)式?而a = function() {}這樣就是表達(dá)式了呢?

比較
函數(shù)調(diào)用表達(dá)式。調(diào)用時(shí)會(huì)返回一個(gè)值。所以是表達(dá)式。
函數(shù)表達(dá)式。還以上函數(shù)表達(dá)式為例。function() {}沒(méi)有被調(diào)用,所以不會(huì)返回值,就是一個(gè)函數(shù)聲明,不解的是賦值給a后,這 a = function(){} 后就是表達(dá)式了呢?是的話應(yīng)該肯定返回一個(gè)值吧。那值是什么呢?

回答
編輯回答
尛憇藌

你這兒就是典型的理解過(guò)度。給你一段代碼,自己領(lǐng)悟吧

var a;  //聲明一個(gè)變量 這里是一個(gè)聲明
a = 13; //變量賦值

上面的代碼等同于

var a = 13; //聲明變量并賦值 這里是一個(gè)表達(dá)式

同理:

function a(){  //這里一個(gè)聲明
}  
var a = function(){  //這里是一個(gè)表達(dá)式
    
}
2018年4月3日 03:03
編輯回答
風(fēng)畔

其實(shí)沒(méi)有那么復(fù)雜.舉個(gè)例子
function fn(){} 這就是聲明一個(gè)函數(shù). 調(diào)用函數(shù)就是 fn();
如果函數(shù)體內(nèi)返回了值,那么可以創(chuàng)建變量接收,也可以不接收; 例如 var a = fn(); fn有return,那么a就等于返回值,沒(méi)有就是undefined.

var a = function (){} 這是函數(shù)創(chuàng)建的另外一種方法. 那這個(gè)函數(shù)不會(huì)執(zhí)行, 還得自己調(diào)用.
a(); 調(diào)用函數(shù). 函數(shù)返回不返回值,和這兩種方式創(chuàng)建函數(shù)無(wú)關(guān).
var b = a(); b就是函數(shù)執(zhí)行返回的值.

2017年1月31日 10:15
編輯回答
懷中人

函數(shù)聲明是這樣的 function fn(){};
表達(dá)式是這樣的 var fn = function(){};

2017年10月21日 06:26
編輯回答
尐懶貓

本來(lái)這么基礎(chǔ)的問(wèn)題是不想回答的,但是看了前面幾個(gè)回答,感覺(jué)不少人對(duì)表達(dá)式這個(gè)基礎(chǔ)知識(shí)點(diǎn)可能還不是完全理解,所以就簡(jiǎn)單寫(xiě)一下吧。

什么是表達(dá)式?表達(dá)式是用運(yùn)算符連接的一個(gè)或多個(gè)值、變量、函數(shù)及其他運(yùn)算數(shù)所形成的式子。

  • fn()這是一個(gè)函數(shù)調(diào)用表達(dá)式,因?yàn)?code>()是函數(shù)調(diào)用運(yùn)算符(去查一下運(yùn)算符有哪些就知道了)
  • a = function() {}這是一個(gè)復(fù)合表達(dá)式,它由afunction() {}兩個(gè)子表達(dá)式和一個(gè)賦值運(yùn)算符組成。但是注意var a = function() {};不是一個(gè)表達(dá)式,而是一個(gè)語(yǔ)句,因?yàn)樗?code>var和分號(hào),它們都不是運(yùn)算符
  • b = 1var b = 1;與上一條相同
不解的是 函數(shù)表達(dá)式以上為例。function() {} 就不是表達(dá)式?而a = function() {}這樣就是表達(dá)式了呢?

首先,為什么單獨(dú)寫(xiě)function a() {}不是表達(dá)式?

這是因?yàn)檫@句代碼“聲明”了一個(gè)名為a的函數(shù)。在解析的時(shí)候,JS引擎會(huì)對(duì)這種形式的函數(shù)聲明做一些特殊處理,比如聲明提升。

用一句不太嚴(yán)格的話來(lái)解釋,函數(shù)聲明類似于整條語(yǔ)句var a = function() {};,只是JS引擎在遇到這么一個(gè)聲明的時(shí)候會(huì)自動(dòng)對(duì)其進(jìn)行提升。前面已經(jīng)解釋過(guò)這種形式的語(yǔ)句不是表達(dá)式。

那為什么a = function() {}是一個(gè)表達(dá)式呢?

在JS中,函數(shù)是一等公民,可以像其他值和變量那樣賦值、傳遞,這個(gè)表達(dá)式右邊正是這么一個(gè)函數(shù)類型的值。甚至你還可以這么寫(xiě):a = function a() {},右邊看起來(lái)與前面的函數(shù)聲明更像了,但這仍然是一個(gè)表達(dá)式,因?yàn)樵贘S中,匿名函數(shù)也可以指定一個(gè)名字。

因此關(guān)于這一點(diǎn),總結(jié)下來(lái)就是:JS引擎在解析時(shí)會(huì)依據(jù)函數(shù)的定義形式不同而做出不同的解析,其中僅會(huì)在函數(shù)定義不作為任何子表達(dá)式存在時(shí)才是函數(shù)聲明,否則就會(huì)把該函數(shù)的定義當(dāng)做函數(shù)表達(dá)式來(lái)解析。

2017年7月27日 09:01
編輯回答
眼雜

謝邀。
簡(jiǎn)單地說(shuō),這是語(yǔ)言規(guī)范規(guī)定的:function a() {}單獨(dú)存在時(shí)就是函數(shù)聲明,否則是函數(shù)表達(dá)式。

證據(jù)(或說(shuō)明)請(qǐng)參考語(yǔ)言規(guī)范。如下:

一. 首先,看一下函數(shù)聲明()和函數(shù)表達(dá)式()的定義:

FunctionDeclaration :
    function Identifier ( FormalParameterList[opt] ) { FunctionBody }

FunctionExpression :
    function Identifier[opt] ( FormalParameterList[opt] ) { FunctionBody }

可見(jiàn),但從語(yǔ)法形式上,兩者幾乎是完全一樣的。唯一區(qū)別是,作為函數(shù)表達(dá)式時(shí),標(biāo)識(shí)符是可選的。

二. 函數(shù)聲明只能單獨(dú)使用,是一個(gè)與聲明(statement)同級(jí)別的語(yǔ)法單元:

Program :
    SourceElements[opt]
SourceElements :
    SourceElement
    SourceElements SourceElement
SourceElement :
    Statement
    FunctionDeclaration

三. 而函數(shù)表達(dá)式作為一個(gè)``,是只能作為其他表達(dá)式的一部分使用,不能單獨(dú)存在的:

MemberExpression :
    PrimaryExpression
    FunctionExpression
    MemberExpression [ Expression ]
    MemberExpression . IdentifierName
    new MemberExpression Arguments

OK,這就很清楚了。

2018年4月30日 07:00
編輯回答
萌吟

賦值運(yùn)算的返回值等于等號(hào)右邊的返回值,a = function(){} 的返回值就是function 的引用地址。a = b =function(){}; a===b//true

2017年11月27日 14:27