Q1 開発者ツール、コンソールを使用して、js コードを入力します。 Enter キーを押すとどうなりますか?
下の図の出力とエラーを解釈する方法
Q2 変數(shù)の宣言と定義に加えて、カンマがあるときに Enter をクリックするとどうなりますか?
下の図の出力とエラーを解釈する方法
Q3 括弧演算子を追加して Enter キーを押した後はどうなりましたか?
1 番目と 3 番目の結(jié)果が上記の結(jié)果と異なる理由
Q4 カンマ、括弧 (関數(shù)をすぐに実行)、およびキャリッジ リターンの一般的な効果は次のとおりです。
以前の質(zhì)問に基づいて理解できると思います
走同樣的路,發(fā)現(xiàn)不同的人生
Enter キーを押すと、コンソールはページの js パーサーを使用して入力されたコードを?qū)g行し、コンソールの最後のステートメントを?qū)g行して得られた戻り値を表示します。
リーリーその理由は、var ステートメントの戻り値が undefined
, a=111
這是一個(gè)賦值運(yùn)算,賦值運(yùn)算的返回值是a
であるためです。無名関數(shù)によって報(bào)告されるエラーを説明するのは少し難しいです。
js の関數(shù)には、関數(shù)宣言と関數(shù)式という 2 つの概念があります。
リーリー関數(shù)宣言は名前付き関數(shù)式と非常に似ているため、JS エンジンはキーワードの後に??関數(shù)宣言が続くか関數(shù)式が続くかをどのように區(qū)別するのでしょうか?答えは現(xiàn)在の狀況の中にあります。コンテキストが評(píng)価環(huán)境の場合、 function は関數(shù)式を?qū)毪工毪趣撙胜丹?、それ以外の場合は関數(shù)宣言とみなされます。 function
は、関數(shù)宣言に関數(shù)名が必要であることを意味します。ここでは左括弧が関數(shù)名に指定されていないため、報(bào)告される構(gòu)文エラーは左括弧の位置にあります。 Uncaught SyntaxError: Unexpected token (
カンマは js の演算子です。カンマ演算子はカンマの周囲の式を順番に実行し、戻り値はカンマの右側(cè)の式の値になります。 ,
リーリー
が評(píng)価コンテキストを構(gòu)成しているため、後続の関數(shù)が関數(shù)式として正しく解析されるためです。 1,...
この種のコードは、名前付き関數(shù)式と空の文字列に解析する必要があると思いますか、それとも関數(shù)宣言とステートメントに解析する必要があると思いますか?
つまり、現(xiàn)象から判斷すると、関數(shù)キーワードを判斷するとき、JS エンジンはバックトラックせずに現(xiàn)在のコンテキストのみを參照します。 (バックトラッキングを不可能にする潛在的な問題が他にもある可能性があります)
Q3
、グループ演算子が最も高い優(yōu)先順位を持ち、戻り値は括弧內(nèi)の式を評(píng)価した結(jié)果です。
()
括號(hào)在 js 中也是一種運(yùn)算符,叫組運(yùn)算符
(function(){})
構(gòu)成了一個(gè)合法的表達(dá)式,而(var a=1)
報(bào)錯(cuò)是因?yàn)榻M運(yùn)算符內(nèi)只允許表達(dá)式,var a=1
Q4
Enter をクリックします。 <
后面的是返回值,變量聲明var a = 1
には戻り値がないため、変數(shù)を直接 + Enter することは、この変數(shù)を出力することと同じです。
',' は演算子です。C 言語では、,
は最も優(yōu)先度の低い演算子です (おそらく js も同じはずです)。その機(jī)能は、最初に ',' の前の式を計(jì)算し、次に ' を計(jì)算することです。 ,' 次の數(shù)式では、最終結(jié)果は ',' の後の數(shù)式を返します。
これが確認(rèn)されると、ほとんどの問題は解決されます。
最後に、var a = 1
根據(jù)詞法解析,其實(shí)等同于var a; a = 1
這兩句。而js里面()
又比較特殊,放表達(dá)式是沒問題的,比如(a = 1)
或者(a ? b : c)
こんな事は問題ありません。
問題は、(var a)
是錯(cuò)的,因?yàn)檫@不是表達(dá)式,不能括起來。同樣的(if (a) else {c})
が間違って書かれていることです。これは、三項(xiàng)演算子を使用して囲むことができるように記述する必要があります。
実際、質(zhì)問の主な質(zhì)問は、js の 語句
和表達(dá)式
の違いです。ステートメントとは何か、式とは何かを理解していれば、上記の質(zhì)問はすべて自分で理解できます。
自分で質(zhì)問して答え、要約してください:
Enter キーを押すと、コンソールはページの js パーサーを使用して入力されたコードを?qū)g行し、コンソールの最後のステートメントを?qū)g行して得られた戻り値を表示します。
変數(shù)宣言と関數(shù)宣言は値を返さない、または未定義を返します
JS は、上記のコンテキストに応じて、function キーワードの後に??関數(shù)宣言または関數(shù)式が続くかどうかを決定します。
カンマ演算子: 1 つのステートメントで複數(shù)の操作を?qū)g行します。カンマ演算子を代入に使用すると、式の最後の項(xiàng)目が返されます。 ————赤い本には
があります リーリー括弧は演算子ではなく、文法的な構(gòu)成要素です。
リーリー リーリー注: 演算子の括弧內(nèi)に配置できるのは式のみです。括弧內(nèi)にステートメントを配置すると、エラーが報(bào)告されます。
関數(shù)をすぐに実行します ()()
最初の括弧は関數(shù)でなければなりません。具體的には (Q3 と組み合わせて) 関數(shù)式、匿名式、または名前付き式を使用できます
上記の參考資料: will の回答と Ruan Yifeng の JS 標(biāo)準(zhǔn)リファレンス チュートリアル - 演算子