2012-12-07 51 views
0

我有这样的代码功能:定义的JavaScript和火狐

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

     function disegnaIconaIngredienti() { 
      // 
     } 
    } 

我另一个函数中定义的功能。与铬和即我没有问题,但Firefox给了我这个错误:

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

有人可以解释我为什么?

+1

@ user1394965:为什么要添加jquery标签? – Codesleuth

+1

我的错。请原谅我 – Martina

回答

1

这是因为firefox有一些叫做函数声明的东西。它们与典型的声明不同,并且可以合法地在一个区域内发生。

函数本身没有提示,因为你会发现声明,所以需要在使用它之前进行定义。

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

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

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

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

这是真正的答案! – Martina

3

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

+0

是的,我已经把代码的另一部分中的关闭的brachets。但现在的问题是:为什么与铬和即我没有问题? – Martina

+0

'if'语句已关闭。很显然,OP希望它是有条件的。 –

+0

@ user1856906阅读dystroy关于浏览器解释的观点。 – lifetimes

2

你的代码是在Firefox相当于

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

所以变量没有一个值,当你调用它。

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

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

这个related question更深入的话题。

0

你忘了关,如果支柱

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

function disegnaIconaIngredienti() { 
    // 
    } 
} 

经过进一步考虑对您的交易是否与@ dystroy的帖子 我倾向于同意他的说法,并说,Firefox不会允许使用

部分他的帖子回答:

ECMAScript doesn't allow function definition in non function blocks (like your if). Browsers allow it but in different ways.

就像你的情况,Firefox不允许它在条件块内。