問題タブ [ecma262]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - 無名関数式と名前付き関数式の初期化が異なるのはなぜですか?
セクション 13または ECMAScript 仕様 (v. 5)を見ています。無名関数式は次のように初期化されます。
FormalParameterListopt で指定されたパラメーターと FunctionBody で指定された本体を使用して、13.2 で指定された新しい Function オブジェクトを作成した結果を返します。実行中の実行コンテキストの LexicalEnvironment を Scope として渡します。FunctionExpression が厳密なコードに含まれている場合、またはその FunctionBody が厳密なコードである場合は、true を Strict フラグとして渡します。
このロジックは、関数宣言が初期化される方法と非常によく似ています。ただし、名前付き関数式の初期化がどのように異なるかに注意してください。
- funcEnv を、実行中の実行コンテキストのレキシカル環境を引数として渡して NewDeclarativeEnvironment を呼び出した結果とします。
- envRec を funcEnv の環境レコードとします。
- Identifier の String 値を引数として渡して、envRec の CreateImmutableBinding 具象メソッドを呼び出します。
- FormalParameterListopt で指定されたパラメーターと FunctionBody で指定された本体を使用して、13.2 で指定されているように新しい Function オブジェクトを作成した結果をクロージャーとします。Scope として funcEnv を渡します。FunctionExpression が厳密なコードに含まれている場合、またはその FunctionBody が厳密なコードである場合は、true を Strict フラグとして渡します。
- envRec の InitializeImmutableBinding 具象メソッドを呼び出して、Identifier の String 値とクロージャを引数として渡します。
- 閉鎖を返します。
名前付き関数式と無名関数式の大きな違いの 1 つは、名前付き関数式を関数内から再帰的に呼び出すことができることですが、私が考えることができるのはそれだけです。セットアップがこれほど異なるのはなぜですか? また、これらの追加の手順を実行する必要があるのはなぜですか?
javascript - 非常に下位互換性のある.every関数
.every関数を配列に実装しています。私は古いJavaScriptエンジン環境にいますが、以下の関数はコンパイラーをあまり満足させませんでした(Rhino)。javascriptのバージョンは、ECMA262標準のJavaScript1.5です。
ただし、Mozillaが提供する、すべての下位互換性を実現するコードはエンジンでは機能しないようです。そのため、より簡単で機能性の低いバージョンを実装しようとしています。したがって、必要な調整を行うためにスクリプトがどのように機能するかを理解したいと思います。
私の質問; JS 1.5で動作することが保証されている以下の非常に複雑でないバージョンを実装するにはどうすればよいですか?
javascript - JavaScript では、スタンドアロンの内部関数は「this」を元のメソッドが呼び出されたオブジェクトとして扱いますか?
本JavaScript Enlightenment (リンクは公開前のバージョン (85 ページ) へのリンクですが、私は公開バージョン (第 6.3 章) を持っていますが、同じことを言っています) では、内部関数はすべてthis
グローバル オブジェクトとして扱われると書かれています。 ( window
) ECMA-3 では修正されましたが、ECMA-5 では修正される予定です。
コードは以下のとおりです。
http://jsfiddle.net/javascriptenlightenment/9GJhu/
しかし、現在の Chrome、Firefox、および node.js は ECMA-5 を大幅に実装する必要があると考えたので、それらで上記のコードを試してみましたが、依然としてfunc2
および内のグローバル オブジェクトが出力されますfunc3
。次に、念のため、and にも追加"use strict";
しました。コード: http://jsfiddle.net/9GJhu/6/ Chrome と node.js では、はではなくとして出力されます。したがって、本によると、ECMA-5にあるはずです。上記のコードで何が間違っていますか?func1
func2
func3
this
undefined
myObject
this
myObject
javascript - javascript の引数参照の不一致
最近、JS で厄介な問題に遭遇しました。
オブジェクトの配列であるマップを関数 f に渡すとします。
しかし、関数パラダイムo=(function(o){return o})()
のように、オブジェクトの全責任を引数として関数に渡すことはできません。これは、o へのいかなる種類の変更も参照されないためです!
上記の参照損失と、2 番目のユース ケースでおそらく異なる参照処理が行われるのはなぜですか。ただし、どちらの場合も、関数は 0. の位置で配列引数を取得します。
javascript - ECMA スクリプト 5 仕様では、0xFF より大きい 16 進整数の解析を成功させるにはどうすればよいですか?
EMCA262 バージョン 5.1では、16 進整数リテラルの定義は次のとおりです: (ドキュメント ページ 20、PDF ページ 32)
HexIntegerLiteral ::
0x
HexDigit
0X
HexDigit
HexIntegerLiteral HexDigitHexDigit ::のいずれか
0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F
私が理解している方法では、HIL は次のようになります。
(HIL (HIL (HIL (HIL (HIL (HIL HD))))))
0x0
HIL は(つまり0x
、16 進数) のように見える場合があり、HD は の場合が0
あるため、HIL は0x00x00x00x00x00
明らかに、このように機能する実装はないため、明らかに何かを誤解しています。この再帰的な定義を (私の頭の中で) どのように解釈すればよいでしょうか?
javascript - ドル記号が「機械的に生成されたコードでのみ使用するためのもの」ではなくなったのはなぜですか?
ECMA-262、第 3 版[ PDF]のセクション 7.6 (「識別子」、26 ページ) の下に、次の注記があります。
ドル記号は、機械的に生成されたコードでのみ使用することを意図しています。
それは理にかなっているようです。JavaScript の生成または埋め込みに一般的に使用される多くの言語は$
、.
「機械的に生成された節」は第 2 版に登場しました。第 1 版にはありませんでした。第 5 版の時点で、説明なしに再び姿を消し、第 6 版のワーキング ドラフトから欠落したままになっています。
推測しなければならない場合、潜在的な落とし穴が考慮されていなかったために最初は省略され、問題を引き起こしていることが明らかになったときに次の版で追加されたと思います. ただし、エディション 5 で再び削除する正当な理由は思いつきません。
「機械的に生成された句」を仕様に含め、その後削除したことについての説明はありますか? これはどこにも文書化されていません。
余談ですが、第 6 版のドラフトにゼロ幅文字を含める理由を説明できる人はいますか? これらの文字がまったく見えないことを考えると、これはさらに問題を引き起こすように思われます。また、これらの文字を識別子に含める理由が思いつきません。
更新:「機械的に生成されたコード」メモの最初の組み込みとゼロ幅文字の組み込みについては、以下の codewaggle の回答で説明されています。回答が残っている唯一のことは、この質問の主な焦点である「機械的に生成されたコード」の削除です。
javascript - JavaScript 関数ポインタ スコープ
JavaScriptに関するアカデミックな質問です。
以下のコード セグメントは、整数の配列を受け取り、関数へのポインターの配列を返します。指摘された関数は、配列の 2 乗値を返すと想定されています。
入力が listOfFunction = sqFnList([1,2,3,4,5]) の場合
次に、listOfFunction[0]()
1を返す必要があります
listOfFunction[1]()
4を返す必要があり ます
しかし、そうではありません。
問題は x = 25 です。事前に助けてくれてありがとう。
javascript - ECMAScript 関数仕様
(別の回答でしたらすみません)
私は ECMAScript 262 仕様 (ECMAScript 5th Edition) を読んでいましたが、関数の4.3.24 では 次のように書かれています。
注: 名前付きプロパティに加えて、関数には、呼び出されたときの動作を決定する実行可能コードと状態が含まれます。 関数コードは、ECMAScript で記述される場合と記述されない場合があります。
ECMAScript 以外で関数を記述できるということの意味を誰かが指摘または説明できますか?
よろしくお願いします!