function f() { console.log('I am outside!'); }
(function () {
if(false) {
// 重复声明一次函数f
function f() { console.log('I am inside!'); }
}
f();//I am inside!
}());
function f() { console.log('I am outside!'); }
(function () {
if(false) {
// 重复声明一次函数f
function f() { console.log('I am inside!'); }
}
f();//I am inside!
}());
function f() { console.log('I am inside!');
这块代码是函数声明,函数声明是进入上下文时候就存在,相当于如下:
(function () {
function f() { console.log('I am inside!'); }
if(false) {
}
f();
}());
补充一点————当不是函数声明,而是函数表达式的时候:
var foo = function (){console.log('i am out')};
(function () {
if (false) {
var foo = function (){console.log('i am in')};
}
foo() // foo is not a function
}())
当为函数表达式的时候,由于var声明提前至上下文前部,相当于:
(function () {
var foo;
if (false) {
foo = function (){console.log('i am in')};
}
foo() // 此时foo为undfined,所以会报错
}())
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
不要在if里声明函数 各个浏览器处理都不一样 你可以试试 ff 跟chrome
无非就是 一个是提升 一个没提升