第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

javascript基礎(chǔ)語法(表達式),見解。

javascript基礎(chǔ)語法(表達式),見解。

繁星coding 2019-03-15 11:15:42
進入誤區(qū),請幫忙解答函數(shù)調(diào)用表達式function fn() {}fn() 這函數(shù)調(diào)用表達式會返回一個值所有是一個表達式。當(dāng)函數(shù)fn中return后面沒有值的時候,返回的就是undefined,有值則返回的就是return后面的值,是否可以這樣理解?函數(shù)表達式var a = function() {};function() {} 單獨應(yīng)該是一個函數(shù)聲明吧。當(dāng)賦值變量a時,a = function() {} 就有一個表達式。如果這樣的話,a = function() {}應(yīng)該會返回一個值吧,如果是這樣的話,請問值是多少?原是表達式var b = 1; 在這1是一個表達式,b=1也是一個表達式。不解的是 函數(shù)表達式以上為例。function() {} 就不是表達式?而a = function() {}這樣就是表達式了呢?比較函數(shù)調(diào)用表達式。調(diào)用時會返回一個值。所以是表達式。函數(shù)表達式。還以上函數(shù)表達式為例。function() {}沒有被調(diào)用,所以不會返回值,就是一個函數(shù)聲明,不解的是賦值給a后,這 a = function(){} 后就是表達式了呢?是的話應(yīng)該肯定返回一個值吧。那值是什么呢?
查看完整描述

5 回答

?
胡說叔叔

TA貢獻1804條經(jīng)驗 獲得超8個贊

本來這么基礎(chǔ)的問題是不想回答的,但是看了前面幾個回答,感覺不少人對表達式這個基礎(chǔ)知識點可能還不是完全理解,所以就簡單寫一下吧。

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

  • fn()這是一個函數(shù)調(diào)用表達式,因為()是函數(shù)調(diào)用運算符(去查一下運算符有哪些就知道了)

  • a = function() {}這是一個復(fù)合表達式,它由a、function() {}兩個子表達式和一個賦值運算符組成。但是注意var a = function() {};不是一個表達式,而是一個語句,因為它包含var和分號,它們都不是運算符

  • b = 1var b = 1;與上一條相同

不解的是 函數(shù)表達式以上為例。function() {} 就不是表達式?而a = function() {}這樣就是表達式了呢?

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

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

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

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

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

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


查看完整回答
反對 回復(fù) 2019-03-20
?
阿晨1998

TA貢獻2037條經(jīng)驗 獲得超6個贊

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


var a;  //聲明一個變量 這里是一個聲明

a = 13; //變量賦值

上面的代碼等同于


var a = 13; //聲明變量并賦值 這里是一個表達式

同理:


function a(){  //這里一個聲明

}  

var a = function(){  //這里是一個表達式

    

}


查看完整回答
反對 回復(fù) 2019-03-20
?
瀟瀟雨雨

TA貢獻1833條經(jīng)驗 獲得超4個贊

簡單地說,這是語言規(guī)范規(guī)定的:function a() {}單獨存在時就是函數(shù)聲明,否則是函數(shù)表達式。

證據(jù)(或說明)請參考語言規(guī)范。如下:

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

FunctionDeclaration :

    function Identifier ( FormalParameterList[opt] ) { FunctionBody }


FunctionExpression :

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

可見,但從語法形式上,兩者幾乎是完全一樣的。唯一區(qū)別是,作為函數(shù)表達式時,標識符是可選的。


二. 函數(shù)聲明只能單獨使用,是一個與聲明(statement)同級別的語法單元:


Program :

    SourceElements[opt]

SourceElements :

    SourceElement

    SourceElements SourceElement

SourceElement :

    Statement

    FunctionDeclaration

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


MemberExpression :

    PrimaryExpression

    FunctionExpression

    MemberExpression [ Expression ]

    MemberExpression . IdentifierName

    new MemberExpression Arguments

OK,這就很清楚了。


查看完整回答
反對 回復(fù) 2019-03-20
?
開心每一天1111

TA貢獻1836條經(jīng)驗 獲得超13個贊

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


查看完整回答
反對 回復(fù) 2019-03-20
  • 5 回答
  • 0 關(guān)注
  • 708 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號