var fn = null;
function foo() {
var a = 2;
function innnerFoo() {
console.log(c);
console.log(a);
}
fn = innnerFoo;
}
function bar() {
var c = 100;
fn();
}
foo();
bar();
小白搞不懂了,求大神告知这里输出什么,为什么?
var fn = null;
function foo() {
var a = 2;
function innnerFoo() {
console.log(c);
console.log(a);
}
fn = innnerFoo;
}
function bar() {
var c = 100;
fn();
}
foo();
bar();
小白搞不懂了,求大神告知这里输出什么,为什么?
其实这个题改成
var fn = null;
var c=3;//新增
function foo() {
var a = 2;
var c=1;//新增
function innnerFoo() {
console.log(c);
console.log(a);
}
fn = innnerFoo;
}
function bar() {
var c = 100;
fn();
}
foo();
bar();
更有意义,成为javascript变量作用域的概念很好的例题
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
foo
执行的时候,innnerFoo
会复制foo
的作用域链,形成闭包,所以fn
执行的时候,也就是innnerFoo
执行会沿着作用域链向上寻找a
,可以找到为2
,但是找不到c
,c
在bar
函数中的作用域链中,innnerFoo
没有在此作用域链中声明c
,所以会报错