Javascript function definition/call difference between browsers
本问题已经有最佳答案,请猛点这里访问。
最近我注意到Firefox和其他浏览器之间的行为差异以下javascript代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | var condition = true; A(); function A() { var x=0; for(var i=0; i<10; i++) { if(condition) { ++x; B(); } function B() { console.log("B function. x ="+x); } } } |
Chrome,Opera,IE输出:
1 2 3 4 5 6 7 8 9 10 | B function. x = 1 B function. x = 2 B function. x = 3 B function. x = 4 B function. x = 5 B function. x = 6 B function. x = 7 B function. x = 8 B function. x = 9 B function. x = 10 |
Firefox输出:
1 | ReferenceError: B is not defined |
但是,如果我在调用之前输入
1 2 3 4 5 6 7 8 9 10 11 | for(var i=0; i<10; i++) { function B() { console.log("B function. x ="+x); } if(condition) { ++x; B(); } } |
基于Mozilla开发者网站的这句话:
Functions must be in scope when they are called, but the function declaration can be below the call
我理解这个电话,
在尝试缩小原因的同时,我在这里阅读了关于函数提升的内容,其中说Firefox在
Firefox不会在