如何检测函数已经在具有相同名称的函数内部

时间:2016-02-01 13:59:47

标签: javascript

我想做这样的事情;问题是(typeof myfunc ==' function')始终为true,因为它是相同的函数名。是否有可能以某种方式从类型范围中排除自我名称功能?

function myfunc() { 
    alert('old');       
}

function myfunc() { 
    if (typeof myfunc == 'function') {      
        // alert('old');        
        alert('new');
    } else {
        alert('myfunc does not exist');
    }
}

2 个答案:

答案 0 :(得分:1)

考虑一下

function myfunc() { } // first definition
function myfunc() { } // second definition

基本相同
var myfunc;
myfunc = (function() { }); // first definition
myfunc = (function() { }); // second definition

您可以在此处看到名称myfunc存在并引用功能对象。第一个定义不再存在,因为第二个定义已取代它。

我认为,你最接近的是在重新定义函数之前使用函数表达式和测试存在。

var myfunc;
myfunc = (function() { });
if (typeof myfunc === 'function') { 
    alert("Function exists"); 
} else {
    alert("Did not exist, create (new) definition now");
    myfunc = (function() { });
}

答案 1 :(得分:1)

你想做的事是不可能的。在覆盖它之前,您需要首先捕获该函数。

var _orgFnc = window.myfunc;  //assuming it is global
function myfunc() { 
    if (_orgFnc) {      
        // alert('old');        
        alert('new');
    } else {
        alert('myfunc does not exist');
    }
}

如果它不是全球性的,你基本上需要做

var _orgFnc = (typeof myfunc === "function") ? myfunc : null;