函数javascript和firefox的定义

时间:2012-12-07 14:27:48

标签: javascript function firefox

我有这段代码:

function a() {
    if(prodotto.approvatoIngredienti==true) {
        disegnaIconaIngredienti();

        function disegnaIconaIngredienti() {
            //
        }
    }

我在另一个函数中定义了一个函数。使用chrome和ie我没有问题,但firefox给了我这个错误:

 --
 [15:26:41.279] disegnaIconaIngredienti is not defined @      http://127.0.0.1:8080/Tesi/javascript/InserimentoProdotti.js:1718

有人可以解释我为什么?

4 个答案:

答案 0 :(得分:3)

您尚未在第二行关闭if声明。

答案 1 :(得分:2)

您的代码在Firefox中等同于

var disegnaIconaIngredienti;
if (prodotto.approvatoIngredienti==true){
   disegnaIconaIngredienti();
   disegnaIconaIngredienti = function(){
      //
   }
}

因此,当您调用变量时,该变量没有值。

Chrome和Internet Explorer提升整个函数声明,而不仅仅是变量声明。

ECMAScript不允许非功能块中的函数定义(如if)。浏览器允许它,但以不同的方式。

这个related question在主题中更深入。

答案 2 :(得分:1)

这是因为firefox有一些叫做函数的语句。它们与典型的声明不同,并且可以在一个块中合法地发生。

没有像你发现的声明那样提升函数本身,因此需要在使用它之前对其进行定义。

请注意,在典型的ECMAScript中,无效if语句中具有该样式的函数,尽管某些浏览器允许它。严格的模式绝对禁止它。

要在if内创建一个完全有效的函数,它必须是一个函数,它是表达式的一部分,就像赋值一样。

function a(){
    if(prodotto.approvatoIngredienti == true) {

                   // legal function in a block
         var disegnaIconaIngredienti = function() {
            //
         };
         disegnaIconaIngredienti();
     }

答案 3 :(得分:0)

你忘了关闭if大括号

function a(){
if(prodotto.approvatoIngredienti==true){
    disegnaIconaIngredienti();
}

function disegnaIconaIngredienti() {
     //
     }
 }

进一步考虑你的结束if和@dystroy的帖子 我倾向于同意他并说Firefox不允许使用

他回答的部分内容:

  

ECMAScript不允许非功能块中的函数定义(如if)。浏览器允许它,但以不同的方式。

就像你的情况一样,Firefox不允许在条件块中使用它。