Untuk fungsi global, Anda dapat menggunakan yang ini alih-alih eval
disarankan dalam salah satu jawaban.
var global = (function (){
return this;
})();
if (typeof(global.f) != "function")
global.f = function f1_shim (){
// commonly used by polyfill libs
};
Anda bisa menggunakan global.f instanceof Function
juga, tapi afaik. nilai Function
akan berbeda dalam bingkai yang berbeda, sehingga hanya akan berfungsi dengan aplikasi bingkai tunggal dengan benar. Itu sebabnya kami biasanya menggunakan typeof
sebagai gantinya. Perhatikan bahwa dalam beberapa lingkungan dapat terjadi anomali typeof f
juga, misalnya oleh MSIE 6-8 beberapa fungsi misalnya alert
memiliki tipe "objek".
Dengan fungsi-fungsi lokal, Anda dapat menggunakannya di jawaban yang diterima. Anda dapat menguji apakah fungsinya juga lokal atau global.
if (typeof(f) == "function")
if (global.f === f)
console.log("f is a global function");
else
console.log("f is a local function");
Untuk menjawab pertanyaan, kode contoh berfungsi untuk saya tanpa kesalahan di peramban terbaru, jadi saya tidak yakin apa masalahnya dengan itu:
function something_cool(text, callback) {
alert(text);
if( callback != null ) callback();
}
Catatan: Saya akan menggunakan callback !== undefined
sebagai gantinya callback != null
, tetapi mereka melakukan hampir sama.