我有这段代码:
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
有人可以解释我为什么?
答案 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不允许在条件块中使用它。