为什么变量的值没有按预期显示?
why the value of variable doesn't show as expected?
在 Whosebug(或其他一些问答网站,我不确定)中有一个词汇范围的高票答案描述为
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()"
作用域决定使用哪个变量并取决于声明函数的位置。
所使用的 值 将是该变量的值 在您从它读取的时间(这将是函数被调用)。
在 Whosebug(或其他一些问答网站,我不确定)中有一个词汇范围的高票答案描述为
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()"
作用域决定使用哪个变量并取决于声明函数的位置。
所使用的 值 将是该变量的值 在您从它读取的时间(这将是函数被调用)。