Đố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 Function
là tốt, nhưng afaik. giá trị của Function
sẽ 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 typeof
thay 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 !== undefined
thay vì callback != null
, nhưng chúng làm gần như nhau.