firefox中javascript范围的问题

wil*_*at8 3 javascript firefox events scope

<div id="myElement2"></div>

<script>
window.onload = function() {
    document.getElementById("myElement1").onclick = function() {
        for (i = 0; i < 2; i++) {
            document.getElementById("myElement2").onmouseover = func;
            function func() {alert("hello"); } } } }
</script>
Run Code Online (Sandbox Code Playgroud)

在chrome和IE中,当单击myElement1时,func完全附加到myElement2.但是,在firefox中单击myElement1时,我收到一条错误消息,指出未定义func.

我应该注意,如果使用匿名函数而不是func,那么它适用于所有3个浏览器.

我的问题是firefox如何处理这方面的范围与IE和Chrome不同?

将.

Jim*_*dra 5

我认为问题是func是在一个块内定义的.尝试通过JSLint运行代码,您会注意到以下问题:

  • 函数语句不能放在块中.使用函数表达式或将语句移动到外部函数的顶部.
  • 'func'在定义之前使用.

尝试分配函数表达式而不是定义函数并按名称分配它,可能是这样的:

document.getElementById("myElement2").onmouseover = function() {
    alert("hello")
};
Run Code Online (Sandbox Code Playgroud)

  • 不要把JSLint所说的一切都视为福音.但是,如果/ for/etc,函数语句不能进入.根据ECMAScript标准阻止.浏览器目前允许它滑动,但是当你这样做时,你会得到的行为会有所不同.避免. (2认同)