相关疑难解决方法(0)

Javascript:将命名函数分配给变量时的不一致性(命名函数表达式)

任何人都可以解释Internet Explorer和Firefox之间在以下方面的行为差异:

var myNamespace = (function () {
  var exposed = {};

  exposed.myFunction = function myFunction () {
    return "Works!";
  }

  console.log(myFunction()); 
  // IE: "Works!"
  // Firefox: ReferenceError: myFunction is not defined

  console.log(exposed.myFunction());
  // IE: "Works!"
  // FF: "Works!"

  return exposed;
})();

console.log(myNamespace.myFunction()); 
// IE: "Works!"
// FF: "Works!"
Run Code Online (Sandbox Code Playgroud)

在Internet Explorer中这种方法可以让我通过使用调用我的函数从我的命名空间函数内部myFunction()exposed.myFunction().

在我的名字功能之外,我可以使用 myNamespace.myFunction()

在Firefox中,结果是相同的,除了没有用的裸命名函数调用.

应该有用吗?如果不应该,那么为什么不呢?

如果它应该是一个已知的错误?

javascript firefox internet-explorer cross-browser

5
推荐指数
1
解决办法
337
查看次数

detachEvent不使用命名内联函数

我今天在IE8中遇到了一个问题(注意我只需要支持IE)我似乎无法解释:使用命名的匿名函数处理程序时detachEvent不起作用.

document.getElementById('iframeid').attachEvent("onreadystatechange", function onIframeReadyStateChange() {
    if (event.srcElement.readyState != "complete") { return; }

    event.srcElement.detachEvent("onreadystatechange", onIframeReadyStateChange); 

    // code here was running every time my iframe's readyState 
    // changed to "complete" instead of only the first time
});
Run Code Online (Sandbox Code Playgroud)

我最终发现改变onIframeReadyStateChange以使用arguments.callee(我通常会避免)而不是解决了这个问题:

document.getElementById('iframeid').attachEvent("onreadystatechange", function () {
    if (event.srcElement.readyState != "complete") { return; }

    event.srcElement.detachEvent("onreadystatechange", arguments.callee);    

    // code here now runs only once no matter how many times the 
    // iframe's readyState changes to "complete"
});
Run Code Online (Sandbox Code Playgroud)

是什么赋予了?!第一个代码段不应该正常工作吗?

javascript internet-explorer anonymous-function javascript-events

2
推荐指数
1
解决办法
3441
查看次数