考虑这个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');
})();
我使用上面的jQuery库的事实应该与问题无关。
在delete
行之后,全局不存在。我这样做是为了让这个全球只在必要时保持活力。
但是,从全局对象中删除属性当时正在运行的函数是不好的做法吗?
答案 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();