StackOverflow(或其他一些q& a网站,我不确定)描述为词汇范围的高投票答案
function a() {
var x
x = 3
function b() {
x = 4
}
function c(){
var x
b()
}
c()
print(x)
}
答案一般就像是
if(final output is 4):
it is lexical scope
elif(final output is 3):
it's dynamic scope
我得出结论:
所以词法范围与调用函数的位置无关,而是在何处定义函数。
如果词汇范围与调用函数的位置有关: b()在c()中调用,最终输出应为3
正常变量都遵循词法范围规则
以下是我的代码
let a = "before f()"
function f(){
console.log(a)
}
f() -->output: before f()
a = "before b() after f()"
f() -->output: before b() after f()
我的问题:
为什么第二次调用f()before b() after f()
,而不是before f()
?
这是我认为的过程
invoking f() the second time
go to function definition and try to find value of a
go to lexical scope where it's out and up to function definition
find a = "before f()"
答案 0 :(得分:3)
范围确定使用哪个变量,并取决于声明函数的位置。
使用的值将是您从中读取时的变量的值(将在调用该函数时)。