5
A
答えて
1
From the Mozilla JS Docs for delete
:
delete
は、オブジェクトのプロパティにのみ有効です。変数名または関数名には、 の効果はありません。
提供される例は、あなたのものと似ています。
だから、alert(delete y);
はなぜ機能しますか?私は正確な答えを釘付けにすることはできませんでしたが、基本的にあなたは評価の範囲に頼ることができません。
私はeval('var y = 2');
が変数として宣言されないとがプロパティとして扱われますが、私は我々のテストの結果よりもさらに他のもののための証拠を発見していないと思います。私は正確な理由が見つかったかどうかを調査するつもりです。 eval
すごみの
その他の記事:
- http://wingolog.org/archives/2012/01/12/javascript-eval-considered-crazy
- http://brownplt.github.com/2012/10/21/js-eval.html
- http://blog.rakeshpai.me/2008/10/understanding-eval-scope-spoiler-its.html
EDIT 0
@Xavier Holtのコメントに基づいて、私はeval
に関して吊り上げと範囲を調べました。 This scope cheatsheet from Mozilla Dev docsは、次のことを持っていた:
のevalは、割り当てを取り込むことができるが、試用版が持つと 同様の割り当てを取り込むことができるので、ないのvar宣言
eval'd VARSは、通常、ホイスト:
function f() { { let x = "inner"; eval("var x = 'outer'"); print(x); // "outer" } }
これを正しく読んでいれば、以前の私の前提は正しかった。 eval()
は、変数を宣言することによって、var
の宣言を評価しません。 delete
が機能するには、プロパティを作成するか、プロパティとして処理する必要があります。
関連する問題
- 1. エラー:yの値は0 <= Y <= 1
- 2. (1u << x << y)はどういう意味ですか?私は問題を抱えている
- 3. 変数が</p> <pre><code>var isUpdated:Bool = false </code></pre> <p>がtrueの場合、私はすぐに</p> <pre><code>func performSegue() { self.performSegueWithIdentifier("toTabSegue", sender: self) } </code></pre> <p>を実行したい
- 4. どのように `[e | x < - xs; y < - ys; ...] =連結[[e | y < - ys; ...] | x < - xs> `
- 5. Javaの結果は、(int)Math.pow(2、x)と1 << x
- 6. classobjectsはシングルトンですか?私たちは<code>x = type(a)</code>と<code>x == y</code>を持っている場合は
- 7. Javaストリームリスト<X>へのマップ<X, List<Y>>
- 8. 私は、我々のシステムで<code>true</code>または<code>false</code>を表し<code>short</code>値を変換しようとしています-1(<code>true</code>)、0(<code>false</code>)ブールエンティティフレームワーク
- 9. -1、0、1以外の戻り値を比較できますか? <code>x</code>が<code>y</code>より大きい場合<code>x</code>未満<code>y</code>、正の整数である場合
- 10. TensorFlow演算子のオーバーロード</p> <pre><code>tf.add(x, y) </code></pre> <p>とTensorFlowで</p> <pre><code>x + y </code></pre> <p>の違いは何
- 11. は、どのように私は、変数</p> <pre><code>int x = 2; </code></pre> <p>とリストを持っている
- 12. </p> <p>が実は、私は私の<code>List<x, y></code>への変数のすべての<code>y</code>要素を追加したい...私はここに新たなんだと私はリストといくつかの助けをしたいと思い
- 13. Hoareのロジックでは{x <= 10^x <10}が{x <= 10}ではなく{x <10}に簡略化されているのはなぜですか?
- 14. 私は<code>f</code></p> <pre><code>> argument_names(f) [1] "x" "y" </code></pre> <p>の引数名をできる取ることにしたい任意の関数についてはR機能
- 15. <ui:repeat>がXの場合は<c:forEach>がYの場合
- 16. 流星:</p> <pre><code>check(param, { x: Number, y: Number, x2: Number, y2: Number, w: Number, h: Number }); </code></pre> <p>しかし<code>param</code>も<code>false</code>次のようになります。私はこのようなチェックをやっているオブジェクトまたはブール
- 17. 内部スコープ内でxが定義されていないのはなぜですか?</p> <pre><code>var x = 1; (function() { console.log(x); var x = 2; }()); </code></pre><p>なぜそれが(X)をCONSOLE.LOG場合、xが未定義であるということである以下のコードで
- 18. grepは、フォルダを除外して、私は</p> <pre><code>/var/ </code></pre> <p>にいるならば、私は<code>/var/www</code></p> <p>を検索したいLinuxの
- 19. 私は2つの機能</p> <pre><code>void foo() { std::cout << 1 << std::endl; } void bar() { std::cout << 2 << std::endl; } </code></pre> <p>をお持ちの場合は2個の関数のC++
- 20. Swiftでnilを指定した場合の省略表現ですか?</p> <pre><code>x = x ?? y </code></pre> <p>しかし<code>x ??= y</code>がコンパイラによって受け入れられない:として私は、上記のステートメントを知って
- 21. std :: cout << xの間のdiffrenceは何ですか;とstd :: cout << x << std :: endl ;?
- 22. java8コンバート地図<X,Y>は+ <X,Z>
- 23. は、どのように私は<code>string</code>あるこの</p> <pre><code>var alldest = cc.returnallfullDestinations(mainElement).Split('|'); </code></pre> <p><code>returnallfullDestionations</code>のようなデータを取得していますC#
- 24. Java8:地図<X, Y>は、私は、ストリームを使用して<code>Map<X, Y></code><code>Map<X, Z></code>に変換する方法を知っているRxJava
- 25. SQLは、私が<strong>サブグループこの単純な<code>xy_table</code>の</strong>に<code>y</code>の<strong><a href="http://en.wikipedia.org/wiki/Median" rel="nofollow noreferrer">Median</a></strong>を計算したいサブグループで
- 26. LINQのは、私はそれから重複を削除するこの</p> <blockquote> <p>するvar A = {アップル、オレンジ、スイカ、リンゴ、オレンジ、アップル}</p> のような例リストデータに</blockquote> <p>を持っている場合
- 27. x =(y/n)+(y%n?1:0)を計算するよりエレガントな方法はありますか?</p> <p><code>x = (y/n) + (y % n ? 1 : 0);</code></p> <p>以上の明示:プログラミングながら
- 28. このテストは同音異義語ですか?</p> <pre><code>if((x>0 || (x<=0))) </code></pre> <p>と<code>if(true)</code>の違いは何であるいくつかの</p> <pre><code>double x; </code></pre> <p>考える
- 29. ロボットフレームワークは、私がこの</p> <pre><code>{"_embedded":[ {"attr_name":"attr_value_1"}, {"attr_name":"attr_name_2"} ] } </code></pre> <p>のようなデータを持っていると私は最初の属性<code>attr_value_1</code>を取得したいJSONリスト
- 30. Cの配列から要素を削除するには?私は、アレイ</p> <pre><code>a = { 1,2,3 } </code></pre> <p>を持っていると私は[1]を削除したいので、結果が希望の場合
ボーナスの質問:なぜあなたはこれを必要としますか? –
私はあなたに技術的な詳細を教えることはできませんが、これはJavaScriptの "[hoisting](http://www.adequatelygood.com/2010/2/JavaScript-Scoping-and-Hoisting)"の動作に関係していると思われます。基本的に、 'var foo;'で定義された変数は特別な扱いを受けます。なぜなら、JSエンジンは関数が動作する前にそこにいることを知っているからです。'eval'で宣言された変数は認識されないので、特別な扱いを受けません。 –
あなたはhttp://perfectionkills.com/understanding-delete/を読んでいますか? – Bergi