`删除'对全局函数的引用本身就是一种不好的做法?

时间:2011-09-06 00:43:28

标签: javascript

考虑这个JavaScript代码......

(function() {

    window.myNameSpace_callback = function() {
        // Do whatever.
        delete window.myNameSpace_callback;
    };

    // Assume this does not return JSON, but has JavaScript code to be executed
    // and also calls a user defined callback.
    $.getScript('http://someapi.com/?callback=myNameSpace_callback');

})();

jsFiddle

我使用上面的jQuery库的事实应该与问题无关。

delete行之后,全局不存在。我这样做是为了让这个全球只在必要时保持活力。

但是,从全局对象中删除属性当时正在运行的函数是不好的做法吗?

1 个答案:

答案 0 :(得分:4)

这样做没有错。

delete关键字删除引用,而不是实际的函数本身。你无法在Javascript中彻底销毁一个对象;你只能删除它的所有引用。剩下的就是Garbage collection

因此,对它所在函数的引用调用delete无关紧要,因为你只是从窗口命名空间中删除对它的引用。只要您仍然引用它,该函数仍然存在。

window.myNameSpace_callback = function() {
    delete window.myNameSpace_callback;

    // We deleted the reference to the function off the window namespace,
    // but we can still access it using arguments.callee
    window.myNameSpace_callback_two = arguments.callee;
}; 

myNameSpace_callback();

myNameSpace_callback(); // Error, but what about...

myNameSpace_callback_two();