4

JavaScriptでのオブジェクト指向プログラミングに関する本を読んでいて、奇妙な振る舞いをしています。

function f1() {
    var a = 1;
    console.log('a in f1 function ', a);
    console.log('f2() called ', f2());
    return 'f1 return value';
}

function f2() {
    console.log('a value in f2() ', a);
    return a;
}

var a = 5;
a = 55;
var foo = 'bar';
console.log('delete a: ', delete a);
console.log(a);
console.log(f1());
console.log('delete window.f2: ', delete window.f2);
console.log(f1());
console.log('delete foo: ', delete foo);

私のdeleteVARIABLEが(Firefoxで)falseを返し、厳密モードで次のような警告が表示される理由を誰かが理解できますか?

SyntaxError: applying the 'delete' operator to an unqualified name is deprecated
console.log('delete foo: ', delete foo);
4

1 に答える 1

9

javascriptで通常の変数を削除することはできません。オブジェクトのプロパティは削除できますが、変数は削除できません。したがって、あなたがやろうとしていることは許可されていません。その変数の内容を解放したい場合(それが指すデータへの他の参照がないと仮定して)、変数をに設定するだけですnull

についてのメッセージの一部は、unqualifiedおそらく、プロパティを指定することは、あなたが持っているような修飾されていない名前以上のものでなければならないという事実に言及しています。オブジェクト参照が必要になります。

DCoderがコメントで言及しているように、これは削除演算子を理解するための良いリファレンスです。

于 2012-08-05T19:06:01.727 に答える