私はjsで何か変わったことを目撃しました。ここではケーススタディです:これは罰金、私はopenModal()
を呼び出す初めての作品Javascriptの変な変数がイベント関数内でヌルになる
var openModal = function() {
...
var pgwSlider = $('.initPgwSlider').pgwSlider();
$('#bootstrap-modal').on('shown.bs.modal', function() {
pgwSlider.reload();
});
$('#bootstrap-modal').on('hidden.bs.modal', function() {
pgwSlider.destroy();
pgwSlider = null;
});
$('#bootstrap-modal').model({
show: true
});
}
。
しかし、私はopenModal()
を呼び出すようにしようと二度目は...私はpgwSlider
を取得するには、ここで、nullである:全体の機能openModal()
が実行されているので
pgwSlider.reload();
これはpgwSlider
がインスタンス化されることを意味し、通常は発生しませんもう一度。
これはメモリリークのようなものですか?
により、後で忘れリスナーをきれいにできますが、グローバルまたはウィンドウ変数として 'pgwSlider'を開始し、他の場所はありますか? –
いいえ、関数内にのみ存在します – Mehdiway
'pgwSlider'をnullに設定するには、モーダルhideにイベントリスナーを追加しています。また、モーダルオープン時にスライダをリロードするイベントリスナを追加します。あなたがモーダルを開くと、イベントリスナは 'openModal'とは独立してトリガします*と' pgwSlider'はnullです... – Li357