問題タブ [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.
javascript - JavaScript 関数の字句スコープ
次のスニペット:
未定義を返します。
私が理解していることから、関数は定義時に変数にアクセスし、実行時にそれらの変数の値にアクセスします。したがって、この場合、f2 はグローバル変数 'a' にアクセスできると推測し、変更された値 (1) を読み取ります。では、なぜ未定義なのですか?
lisp - Emacs Lisp:なぜこのsexpがinvalid-functionエラーを引き起こすのですか?
問題の性別は
私には、これは に評価されるように見えますが8
、他の Lisp (Racket など) では評価されますが、elisp では代わりに次のエラーがスローされます。
と伝えているようです
有効な関数ではありません。これは間違っているようです。その式を評価すると、
これは私にとって有効な機能のように見えます。なぜこれが起こるのか誰にも分かりますか?動的スコープと関係がありますか?
ruby - Ruby パーサーの原則は何ですか?
Ruby が物事を解析する方法をどのように予測できますか?
文字列を連結しようとしているときに、Ruby で本当に驚くべき解析エラーに遭遇しました。
もちろん、余分なスペースを入れても意図したとおりに機能します。
を持っていると、このエラーが発生しますanything.any_method +"any string"
。Ruby が行うことは、括弧が省略され、メソッドに引数を与えようとしていると想定することです。
文字列に単項演算子を定義していないことに気づき、+@
そのエラーをスローします。
私の質問は、Ruby パーサーの動作を予測するためにどの原則を使用する必要があるかということです。このエラーは、多くのグーグル検索の後で初めてわかりました。.capitalize
パラメータを取らないことは注目に値します (C ソース コードであっても)。前のオブジェクトに適用されないメソッドを使用すると、+@
エラーではなくエラーがスローされundefined method 'capitalize' for "every":String
ます。したがって、この解析は明らかに高レベルです。私は Matz のparser.yを読むほど知識がありません。他にも同様の驚くべきエラーに遭遇しました。Ruby の解析の優先順位を教えてもらえますか?
emacs - emacs lisp における lexical-binding と defvar の間の奇妙な相互作用
次の emacs lisp ファイルは、アリスが init ファイルで字句的にバインドされたローカル変数を使用し、ボブが init ファイルでグローバルな特殊変数としてfoo
定義し、アリスがボブの init ファイルコードの一部を彼女自身の init ファイルに借用した場合に何が起こるかを確認するためのものです。それが特別になることを知っています。foo
defvar
foo
出力:
結果 R1 と R2 は、期待どおりです。結果 R4 は defvar のドキュメントと一致していますが、アリスがボブのコードを読まなければ驚くかもしれません。
R3は意外だった。なぜR3はこうなった?
R4といえば、アリスが
foo
他人に特別にされないようにするにはどうすればいいですか? たとえば、foo
彼女が init ファイルまたは emacs パッケージの 1 つで使用するレキシカル ローカル変数である(defvar foo "something")
可能性があり、たまたま使用するパッケージの一部である可能性があるか、またはfoo
将来のバージョンで導入される新しい特殊変数名の 1 つである可能性があります。 Emacsの。Alice が Emacs に「このファイルでは、外部からのコードが同じ名前の特殊変数を使用している場合でも、foo は常に字句的であるべきです」と言うファイルに入れることができるものはありますか?
javascript - Javascript スコープ チェーン巻き上げ
たとえば、JavaScriptでレキシカルスコープがどのように行われているかについて、私はちょっと混乱しています。
a
5 行目で再定義すると、 が出力されますundefined
。何故ですか?で見つけることができるにouter.VO
もかかわらず、インタプリタがトラバースアップしてチェックしないのはなぜですか?定義される前に使用されていますか?a
inner.VO
javascript - JavaScript のレキシカル スコープ パラメーター
Javascript Koans を使って作業していると、次のコードに行き詰まります。
23 になり、それで問題ありません。私が困惑しているのは、「mysteryFunction3」変数に指定されたパラメーターが「param」としてdoMysteriousThing関数に渡される方法/理由です。
それぞれが1つのパラメーターを受け取る内部関数と外部関数がある場合、次のように指定されたパラメーターが指定された外部関数と等しい変数を定義するのは、単なる現実ですか?
次のように、パラメーターを外部関数の変数インスタンスに送信するようにします。
そのパラメーター (10) が内部関数のパラメーターとして読み取られるようになりますか?
javascript - 変数オブジェクトの JavaScript 静的スコープと実行時評価
JavaScript には 2 つの組み合わせがあると言われています。
- 変数オブジェクトの動的なランタイム評価
- 静的/レキシカルに定義されたスコープ
上記の点を非常に明確に示し、理解するのに役立ついくつかの「トリッキーな」例を使用して、誰かが上記を説明してください。
静的スコープとは、スコープがコード内で関数が物理的に定義されている場所に基づいていることを意味すると思います。