window に登録した関数(つまりグローバル関数)を削除するには、delete 演算子を使う。ただし、いくつかの注意点がある。
// 登録 window.myFunction = function() { console.log('test') } // 呼び出し myFunction() // → test // 削除 delete window.myFunction // 確認 console.log(typeof myFunction) // → "undefined"
注意点
let や const で定義した関数は削除できない(delete は無効)
var または window.xxx = 形式で定義した場合のみ削除可能
Strict モードでは delete が失敗するとエラーになる
つまり、グローバルスコープにある関数でも、どのように定義したかによって削除できるかが決まる。
// 削除できない例 function test() {} delete window.test // false(削除されない) // 削除できる例 window.test = function() {} delete window.test // true(削除される)
このように、function 宣言ではなく プロパティとして代入した関数 であれば delete で安全に消せる。