2012-12-07 78 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不允許它在條件塊內。