สำหรับฟังก์ชั่นทั่วโลกคุณสามารถใช้สิ่งนี้แทนeval
คำแนะนำในหนึ่งในคำตอบ
var global = (function (){
return this;
})();
if (typeof(global.f) != "function")
global.f = function f1_shim (){
// commonly used by polyfill libs
};
คุณสามารถใช้global.f instanceof Function
เช่นกัน แต่ afaik ค่าของFunction
จะแตกต่างกันในเฟรมที่แตกต่างกันดังนั้นมันจะทำงานเฉพาะกับแอปพลิเคชันเฟรมเดียวอย่างถูกต้อง นั่นเป็นเหตุผลที่เรามักจะใช้typeof
แทน โปรดทราบว่าในบางสภาพแวดล้อมอาจมีความผิดปกติtypeof f
เช่นกันโดย MSIE 6-8 ฟังก์ชั่นบางอย่างเช่นalert
มีประเภท "วัตถุ"
โดยฟังก์ชั่นท้องถิ่นคุณสามารถใช้หนึ่งในคำตอบที่ได้รับการยอมรับ คุณสามารถทดสอบว่าฟังก์ชั่นท้องถิ่นหรือทั่วโลกเช่นกัน
if (typeof(f) == "function")
if (global.f === f)
console.log("f is a global function");
else
console.log("f is a local function");
เพื่อตอบคำถามรหัสตัวอย่างทำงานให้ฉันโดยไม่มีข้อผิดพลาดในเบราว์เซอร์ล่าสุดดังนั้นฉันไม่แน่ใจว่าเกิดปัญหาอะไร:
function something_cool(text, callback) {
alert(text);
if( callback != null ) callback();
}
หมายเหตุ: ฉันจะใช้callback !== undefined
แทนcallback != null
แต่พวกเขาเกือบจะเหมือนกัน