2011-08-10 6 views
1

JavaScriptでは、delete関数の引数はありませんが、 はdelete関数のグローバル変数です。javascriptのdelete演算子の振る舞い

この現象はなぜですか?

var y = 1; 
(function (x) { return delete y; })(1); // true 

(function (x) { return delete x; })(1); // false 
+1

両方リターン 'false'に(すなわちない'のeval()を '使用Firebugのまたはブラウザコンソール内の)通常の使用では。私の答えを見てください。 –

答えて

4

編集:両方(すなわちないeval()を使用Firebugのまたはブラウザコンソール内)通常の使用でfalseを返します。 Tim Down’s answerを参照してください(受け入れられるはずです)。

+2

実際に最初の例は、 'y'が' var'を使って宣言されているため、 '[[DontDelete]]属性を持っているので動作しません(ECMAScript 3では:[[Configurable]]'はECMAScript 5 )をtrueに設定します。 –

+0

@Tim:ありがとう!私は訂正した。私の答えを編集しました。 –

5

実際には、いずれもtrueを返さず、実際にはFirefoxやChrome(他のブラウザではテストされていません)にはありません。 Firebugや別のブラウザコンソール(changes things due to the console using eval())でこれをテストしたと思います。 deleteはオブジェクトのプロパティを削除するだけで、varを使用して宣言された変数をスコープに関係なく削除することはできません。

ここ被験者にKangaxことにより、優れた記事の:http://perfectionkills.com/understanding-delete/

関連する問題