关于词法作用域和闭包的一点疑问
資深大佬 : Aloehuang 8
let a = 0;
function addone() { let a = 10; addtwo(); }
function addtwo() { let a = 20; addthree(); }
function addthree() { console.log(a); }
addone();
结果为 0,为什么不是 20 呢?不是说一层一层从调用上下文查找直到全局上下文吗?
大佬有話說 (38)
let a = 0;
function addone() { let a = 10; addtwo(); }
function addtwo() { let a = 20; addthree(); }
function addthree() { console.log(a); }
addone();
结果为 0,为什么不是 20 呢?不是说一层一层从调用上下文查找直到全局上下文吗?
词法(静态)作用域: 在哪定义,在哪往上找变量
动态作用域: 在哪调用,在哪往上找变量
let a = 0;
let addone = () => { let a = 10; addtwo(); }
let addtwo = () => console.log(a);
addone()
/*===*/
let a = 0;
let addone = () => { let a = 10; let addtwo = () => console.log(a); addtwo(); }
addone()
我的意思是,不管结果怎么样,这样的代码根本就不应该出现。