Đối với các hàm toàn cầu, bạn có thể sử dụng hàm này thay vì được evalđề xuất trong một trong các câu trả lời.
var global = (function (){
return this;
})();
if (typeof(global.f) != "function")
global.f = function f1_shim (){
// commonly used by polyfill libs
};
Bạn có thể sử dụng global.f instanceof Functionlà tốt, nhưng afaik. giá trị của Functionsẽ khác nhau trong các khung khác nhau, vì vậy nó sẽ chỉ hoạt động với một ứng dụng khung duy nhất đúng cách. Đó là lý do tại sao chúng ta thường sử dụng typeofthay thế. Lưu ý rằng trong một số môi trường cũng có thể có sự bất thường typeof f, ví dụ như MSIE 6-8, một số chức năng chẳng hạnalert có loại "đối tượng".
Bằng các hàm cục bộ, bạn có thể sử dụng một trong câu trả lời được chấp nhận. Bạn có thể kiểm tra xem chức năng là cục bộ hay toàn cầu.
if (typeof(f) == "function")
if (global.f === f)
console.log("f is a global function");
else
console.log("f is a local function");
Để trả lời câu hỏi, mã ví dụ đang hoạt động với tôi mà không có lỗi trong các trình duyệt mới nhất, vì vậy tôi không chắc vấn đề với nó là gì:
function something_cool(text, callback) {
alert(text);
if( callback != null ) callback();
}
Lưu ý: Tôi sẽ sử dụng callback !== undefinedthay vì callback != null, nhưng chúng làm gần như nhau.