[解決済み] (1, eval)('this') vs eval('this') in JavaScript?
質問
読み始めると JavaScriptのパターン は、いくつかの コード は私を混乱させた。
var global = (function () {
return this || (1, eval)('this');
}());
以下は私の質問です。
Q1:
(1, eval) === eval
?
なぜ、どのように機能するのでしょうか?
Q2:なぜ
var global = (function () {
return this || eval('this');
}());
または
var global = (function () {
return this;
}());
どのように解決するのですか?
の違いは
(1,eval)
と平凡な
eval
は、前者が
値
であり、後者はlvalueであることです。 他の識別子であればもっとわかりやすいのですが。
var x;
x = 1;
(1, x) = 1; // syntax error, of course!
それは
(1,eval)
が得られる式で
eval
(と言うのと同じように)。
(true && eval)
または
(0 ? 0 : eval)
がそうでしょう)、しかし、それは、参照先が
eval
.
なぜ気にする?
Ecma の仕様では
参照
を
eval
を直接 eval call" にすることはできませんが、単に
eval
を返すだけの式は間接的なものであり、間接的な eval 呼び出しはグローバルスコープで実行されることが保証されています。
まだ知らないことがある。
- どのような状況で、直接 eval は ではなく はグローバルスコープで実行されますか?
-
どのような状況下で
this
は、グローバルスコープの関数の ではなく は、グローバルオブジェクトをもたらすか?
さらにいくつかの情報を得ることができます ここで .
EDIT
どうやら、最初の質問に対する答えは、「ほとんど常に」であるようです。 直接
eval
から実行されます。
現在の
スコープから実行されます。 次のようなコードを考えてみましょう。
var x = 'outer';
(function() {
var x = 'inner';
eval('console.log("direct call: " + x)');
(1,eval)('console.log("indirect call: " + x)');
})();
驚くことではありませんが(へっへっへ)、これがプリントアウトされます。
direct call: inner
indirect call: outer
EDIT
さらに実験した結果、仮に
this
に設定することはできません。
null
または
undefined
. 他の偽の値 (0, '', NaN, false) を設定することもできますが、唯一
は非常に
を意図的に設定する必要があります。
私は、あなたのソースは軽度の可逆的な頭蓋直腸逆転に苦しんでおり、Haskell でプログラミングして 1 週間過ごすことを検討したいと思うかもしれない、と言うつもりです。
関連
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] なぜGoogleはJSONレスポンスにwhile(1);を前置するのでしょうか?
-
[解決済み] 私のJavaScriptコードは "No 'Access-Control-Allow-Origin' header is present on requested resource "というエラーを受け取りますが、Postmanはそうならないのはなぜですか?
-
[解決済み】JavaScript版sleep()とは?)
-
[解決済み】JavaScriptの関数にデフォルトのパラメータ値を設定する
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
-
[解決済み] URL/アドレスバーからJavascriptの関数を呼び出す
-
[解決済み] Fetch: ステータスがOKでない場合、プロミスを拒否し、エラーをキャッチするか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Javascriptによるタッチスクリーンデバイスの検出
-
[解決済み] jqueryでdivの要素がオーバーフローしていないかチェックする
-
[解決済み] reactのrender関数でdynamic hrefを作成するには?
-
[解決済み] Angularjs - 現在の日付を表示する
-
[解決済み] JavaScriptを使用してHTML要素に属性を追加/更新するには?
-
[解決済み] JSXとLoadshを使用して、ある要素をn回繰り返す方法
-
[解決済み] JavaScriptで文字列を数値に変換する最速の方法は何ですか?
-
[解決済み] サブドメインにまたがってlocalStorageを使用する
-
[解決済み] JavaScript のオブジェクトの配列を比較し、最小値/最大値を取得する
-
[解決済み] JavaScriptデータフォーマット/プリティプリンタ