ではconsole.logの奇妙な行動: 我々はCONSOLE.LOGする最初の呼び出しをコメントする場合は、1つは= 0
set.[[Entries]].length
をコメントされていない場合、set.[[Entries]].length
は、1
になります。EcmaScript6:以下を説明することができますかWeakSet引数
出力:長さ= 0;
let mySet = new WeakSet(),
key = {};
mySet.add(key); // add the object to the set
//console.log(mySet); // uncommenting will change the [[Entries]].length
key = null; // delete key
console.log(mySet); // [[Entries]].length: 0
Otput:長さ= 1
let mySet = new WeakSet(),
key = {};
mySet.add(key); // add the object to the set
console.log(mySet); // commenting will change the [[Entries]].length
key = null; // delete key
console.log(mySet); // [[Entries]].length: 1
もう一つの版:我々は(スクリプトの終わりに)第二の場合には1以上console.log(mySet)
を追加した場合。 [[Entries]].length
は0
になります。
コメント者の1人がガベージコレクタであると述べました。しかし、それは実際のスクリプトでどのように動作するのでしょうか?私はオブジェクトを呼び出す1回使用する場合(2回目なし)は削除されますか(オブジェクトはnull
に設定された後)ですか?
なぜこれが奇妙ですか?あなたはオブジェクト参照となるキーを設定しています(waaay)。その後、あなたはその参照を削除し直します。私は個人的にこの動作の説明が好きです。 – evolutionxbox
@Ivar 私は変数名を変更しましたが(私はまだセッターを学んでいませんでしたが)、その変数はまだ発生しています。 コードを少し変更したので、誰でもコピーして貼り付けることができます。 –
@evolutionxboxは、第2のconsole.log呼び出しのために、 'key'を' null'として割り当てた後もあります。同じ結果が出力されるはずですが、出力されません。もう一度私のexplenationを見直してください。 –