在IE中命名函数表达式,第2部分

时间:2010-04-21 00:48:55

标签: javascript internet-explorer anonymous-function

我前一段时间问this question,对接受的答案感到满意。然而,我刚才意识到以下技术:

var testaroo = 0;
(function executeOnLoad() {
    if (testaroo++ < 5) {
        setTimeout(executeOnLoad, 25);
        return;
    }
    alert(testaroo); // alerts "6"
})();

返回我期望的结果。如果T.J.Crowder我的第一个问题的答案是正确的,那么这种技术不应该起作用吗?

2 个答案:

答案 0 :(得分:6)

嗯,它会起作用,JScript(IE)的问题是,函数表达式(executeOnLoad)的标识符会泄漏到其封闭范围,并实际创建两个功能对象..

(function () {
  var myFunc = function foo () {};
  alert(typeof foo); // "undefined" on all browsers, "function" on IE

  if (typeof foo !== "undefined") { // avoid TypeError on other browsers
    alert( foo === myFunc ); // false!, IE actually creates two function objects
  }
})();

答案 1 :(得分:6)