問題タブ [lexical-scope]

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.

0 投票する
2 に答える
115 参照

javascript - JavaScript 関数の字句スコープ

次のスニペット:

未定義を返します。

私が理解していることから、関数は定義時に変数にアクセスし、実行時にそれらの変数の値にアクセスします。したがって、この場合、f2 はグローバル変数 'a' にアクセスできると推測し、変更された値 (1) を読み取ります。では、なぜ未定義なのですか?

0 投票する
4 に答える
2071 参照

lisp - Emacs Lisp:なぜこのsexpがinvalid-functionエラーを引き起こすのですか?

問題の性別は

私には、これは に評価されるように見えますが8、他の Lisp (Racket など) では評価されますが、elisp では代わりに次のエラーがスローされます。

と伝えているようです

有効な関数ではありません。これは間違っているようです。その式を評価すると、

これは私にとって有効な機能のように見えます。なぜこれが起こるのか誰にも分かりますか?動的スコープと関係がありますか?

0 投票する
1 に答える
99 参照

ruby - Ruby パーサーの原則は何ですか?

Ruby が物事を解析する方法をどのように予測できますか?

文字列を連結しようとしているときに、Ruby で本当に驚くべき解析エラーに遭遇しました。

もちろん、余分なスペースを入れても意図したとおりに機能します。

を持っていると、このエラーが発生しますanything.any_method +"any string"。Ruby が行うことは、括弧が省略され、メソッドに引数を与えようとしていると想定することです。

文字列に単項演算子を定義していないことに気づき、+@そのエラーをスローします。

私の質問は、Ruby パーサーの動作を予測するためにどの原則を使用する必要があるかということです。このエラーは、多くのグーグル検索の後で初めてわかりました。.capitalizeパラメータを取らないことは注目に値します (C ソース コードであっても)。前のオブジェクトに適用されないメソッドを使用すると、+@エラーではなくエラーがスローされundefined method 'capitalize' for "every":Stringます。したがって、この解析は明らかに高レベルです。私は Matz のparser.yを読むほど知識がありません。他にも同様の驚くべきエラーに遭遇しました。Ruby の解析の優先順位を教えてもらえますか?

0 投票する
2 に答える
226 参照

emacs - emacs lisp における lexical-binding と defvar の間の奇妙な相互作用

次の emacs lisp ファイルは、アリスが init ファイルで字句的にバインドされたローカル変数を使用し、ボブが init ファイルでグローバルな特殊変数としてfoo定義し、アリスがボブの init ファイルコードの一部を彼女自身の init ファイルに借用した場合に何が起こるかを確認するためのものです。それが特別になることを知っています。foodefvarfoo

出力:

結果 R1 と R2 は、期待どおりです。結果 R4 は defvar のドキュメントと一致していますが、アリスがボブのコードを読まなければ驚くかもしれません。

  1. R3は意外だった。なぜR3はこうなった?

  2. R4といえば、アリスがfoo他人に特別にされないようにするにはどうすればいいですか? たとえば、foo彼女が init ファイルまたは emacs パッケージの 1 つで使用するレキシカル ローカル変数である(defvar foo "something")可能性があり、たまたま使用するパッケージの一部である可能性があるか、またはfoo将来のバージョンで導入される新しい特殊変数名の 1 つである可能性があります。 Emacsの。Alice が Emacs に「このファイルでは、外部からのコードが同じ名前の特殊変数を使用している場合でも、foo は常に字句的であるべきです」と言うファイルに入れることができるものはありますか?

0 投票する
1 に答える
177 参照

javascript - Javascript スコープ チェーン巻き上げ

たとえば、JavaScriptでレキシカルスコープがどのように行われているかについて、私はちょっと混乱しています。

a5 行目で再定義すると、 が出力されますundefined。何故ですか?で見つけることができるにouter.VOもかかわらず、インタプリタがトラバースアップしてチェックしないのはなぜですか?定義される前に使用されていますか?ainner.VO

0 投票する
3 に答える
1398 参照

javascript - JavaScript のレキシカル スコープ パラメーター

Javascript Koans を使って作業していると、次のコードに行き詰まります。

23 になり、それで問題ありません。私が困惑しているのは、「mysteryFunction3」変数に指定されたパラメーターが「param」としてdoMysteriousThing関数に渡される方法/理由です。

それぞれが1つのパラメーターを受け取る内部関数と外部関数がある場合、次のように指定されたパラメーターが指定された外部関数と等しい変数を定義するのは、単なる現実ですか?

次のように、パラメーターを外部関数の変数インスタンスに送信するようにします。

そのパラメーター (10) が内部関数のパラメーターとして読み取られるようになりますか?

0 投票する
3 に答える
402 参照

lisp - Common Lisp のスコープに関する微妙な点 (動的 vs レキシカル)

宣言SPECIAL、特殊演算子LET、マクロDEFVAR、および Common Lisp における動的スコープとレキシカル スコープに関する StackOverflow のいくつかの質問 (たとえば、 this ) に関するドキュメントを読んだ後でも、次の動作が理解できません。これらのフォームを SBCL で評価します。

変数が defvarさfnれる前にへの 3 番目の呼び出しが出力され、変数が defvar された後に出力されるのはなぜですか?xDINAMIC_1ST_BINDINGxLEXICAL_1ST_BINDING

0 投票する
0 に答える
130 参照

javascript - 変数オブジェクトの JavaScript 静的スコープと実行時評価

JavaScript には 2 つの組み合わせがあると言われています。

  1. 変数オブジェクトの動的なランタイム評価
  2. 静的/レキシカルに定義されたスコープ

上記の点を非常に明確に示し、理解するのに役立ついくつかの「トリッキーな」例を使用して、誰かが上記を説明してください。

静的スコープとは、スコープがコード内で関数が物理的に定義されている場所に基づいていることを意味すると思います。