var a = 10;
function foo(){
console.log(a);
}
(function(funcArg){
var a = 20;
funcArg();
})(foo);
var a = 10;
function foo(){
console.log(a);
}
(function(funcArg){
var a = 20;
funcArg();
})(foo);
我运行了下也懵了下,于是到@柱子哥 推荐的文章里面现学现说下
可以说看了第二章词法作用域和动态作用域就懂了
首先,函数的作用域,在JS里是静态作用域,什么意思呢,就是在定义的时候就已经定了(在当前找不到变量就往上级作用域找)
那foo在定义的时候,就已经决定了,他的作用域(函数里)和上级作用域(函数外,也就是全局)。
所以不管在哪里调用,它都会:要不从自己的作用域里,要不就是它上级作用域找这个变量。
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
变量作用域分为全局和局部
如果当前做用域没有变量, 会顺着代码的词法范围往外一层一层的找.
词法范围的意思就是程序文本.