問題タブ [scope-chain]

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 投票する
1 に答える
1103 参照

javascript - 関数値の戻り値を二重にネストすると、二重にネストされた関数に入ることができなくなります

David Shariff's Blogスコープ チェーン実行コンテキスト スタックの記事を理解しようとして、ここでクロージャーを理解しようとしました。

内部関数がその親またはスコープチェーン全体から変数オブジェクトを持っているかどうかをテストしたかったので、例を繰り返すネストされた関数を追加しました。

そして、それは何の結果ももたらしていません。インタープリターはfoobar()関数に入っていないようです。そして、構文はその親と同じです。

でも、関数の宣言と実行を分けるとうまくいきます。

そして、私はその理由を推測しようとしています。bar()およびfoobar()関数との違いはどこにありますか。

PS - 私はJSFiddleでテストしています

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

javascript - JavaScript クロージャーとローカル

すぐに呼び出されるクロージャーで囲まれたJavascriptメインファイルがあります(「グローバル」を汚染しないように:

コードにセミコロンではなくコンマが含まれるように、関数ヘッダーから変数を削除するときに、単純な骨の折れるコーディング エラーを作成しました。

確かに、「var i」行のセミコロンが欠けていることが問題でした。しかし、私が考えた動作は、現在ローカルで定義されている変数「closureVariable」が上位レベルのスコープ定義を隠し、ローカルで定義された変数の値がスコープチェーンの下位の関数で利用できるはずだったということです (つまり、関数「混乱」は「[1,2,3,4]」を出力する必要がありました。

ここで Javascript スコープ チェーンについて理解していないことは何ですか?

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

javascript - JavaScript クロージャとスコープ チェーンの例

このコードがそのように機能する理由を誰かが (明確かつ簡潔に) 説明してくれませんか? 私は、クロージャーが存在せず、javascript のように機能しない Java (6 および 7) で強く型付けされたバックグラウンドを持っています。この質問に関連する概念は、クロージャーとスコープチェーンだと思います。

次に例を示します。

上記の例では 9 回 (10 回) のログが記録されますが、予想と私の直感では 0 ~ 9 回のログが記録されると考えていました。

これが Javascript のように機能するのはなぜですか? クロージャーは非常に強力ですが、その概念を完全に把握しようとしています! 少し変更した例では正しい出力が生成されますが、なぜでしょうか?

クロージャーは Javascript に固有のものではありませんが、ブラウザー/DOM とのインターフェイスとして JavaScript が実際に記述されている場合に、クロージャーが強力である理由を確認したいと思います。

ブラウザー/DOM とのインターフェース時にクロージャー手法を適用する方法の良い実用的な例はありますか?

ありがとう。

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

javascript - 動的に追加されたオブジェクト プロパティが Javascript に追加されない

私はJavascriptに非常に慣れていないので、ご容赦ください。なぜこれがうまくいかないのかを理解しようとして、私は髪を引っ張っています。私はJavaのバックグラウンドを持っていることを覚えておいてください。関数「getCsvData」があり、基本的にCSVファイルを解析し、オブジェクトプロパティをデータソースオブジェクトに動的に追加してから返そうとしています。ご覧のとおり、関数「getCsvData」の外で、関数を呼び出した後に結果をログに記録しようとしましたが、結果オブジェクトは空で、オブジェクト プロパティが追加されていません。

私はまだ学び、理解しようとしているクロージャー/スコープチェーンの解決に起因する非常に強い感情を持っています.

問題は、プロパティがデータソース オブジェクトに動的に追加されないのはなぜですか? それらは実際には「$.get」の 2 番目の引数として渡された無名関数「function(data)」のスコープに追加されていると思いますが、外部関数「getCsvData」が戻るとすぐに削除されます。なぜ、どうすればこれを修正できますか? ありがとう!!

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

javascript - スコープチェーン内の値を操作するjavascript

私は Javascript のクロージャとスコープ チェーンについて調べてきましたが、スコープ チェーン内から変数を操作することについては何も見ていません。これは、私が遭遇している同様のタイプのシナリオです。

どうすれば戻せますか{firstFunction: 'yes', secondFunction: 'yes', thirdFunction: 'yes'}

コードには構文エラーがあるかもしれませんが、それは私が理解しようとしている考えです。このコードをその場で書き上げたので、私が修正しようとしているものと同様のシナリオを見ることができます。

ありがとう