var a = 2;
function foo() {
console.log(a);
}
function bar() {
var a = 3;
foo();
}
bar();
// 1.如果处于词法作用域,也就是现在的javascript环境。
// 变量a首先在foo()函数中查找,没有找到。
// 于是顺着作用域链到全局作用域中查找,找到并赋值为2。
// 所以控制台输出2
// 2.如果处于动态作用域,同样地,变量a首先在foo()中查找,没有找到。
// 这里会顺着调用栈在调用foo()函数的地方,也就是bar()函数中查找,找到并赋值为3。
// 所以控制台输出3
- 词法作用域(静态作用域):正常情况下,查找一个变量会先从当前作用域查找,没有的话往外部作用域查找,直到全局作用域
- 动态作用域:
- 区别:词法作用域是在定义时确定的,而动态作用域是在运行时确定的
本文探讨了JavaScript中的两种作用域——词法作用域和动态作用域。在词法作用域中,变量查找遵循从当前作用域到全局作用域的链式查找,而动态作用域则在运行时根据调用栈确定变量所在位置。通过示例代码解释了两种作用域下变量`a`的查找过程和不同输出结果。
581

被折叠的 条评论
为什么被折叠?



