调用函数后,函数的范围还剩下什么?
what will remain of scope of a function after it has been called?
我正在使用闭包,我得到了这段代码:
doit = true;
aww = function() {
if(doit) {var foo; doit = false;} else {}
foo = 0; foo += 1; return foo;
}
doit
是一个变量,aww
函数仅使用 define/delcare foo
一次。
当我第一次执行 aww
时,它将 delcares foo
作为局部变量(并设置为在以后的调用中不声明它)然后它将 foo
分配给 0 并将其增加 1。并且 returns 它 (1)
我预计,下次我调用 aww
时,不会先声明 foo
变量,因此 aww
函数应该首先创建 foo
并创建它global,因为它还没有被声明,并且它被赋值给 0,前面没有任何 var。但是实际发生的事情和我的预料不一样
foo
没有变成全局的,还是局部的。
假设函数的作用域在函数执行结束后仍然存在是真的吗?
或者,如果不是,那么说只有 本地声明的变量列表 保存在某处是真的吗?
我读过有关闭包的内容,但并不完全理解它们。这个问题的答案让我比以前更清楚闭包。谢谢
你的函数:
aww = function() {
if(doit) {var foo; doit = false;} else {}
foo = 0; foo += 1; return foo;
}
被解释为好像是这样写的:
aww = function() {
var foo;
if(doit) {doit = false;} else {}
foo = 0; foo += 1; return foo;
}
函数总是return 1,因为foo
总是被函数设置为0
然后1
。变量声明被视为发生在函数的顶部。
对doit
的引用是其中与闭包有关的部分。因为该变量在函数外部,所以函数会在第一次调用时将其值切换为 false,然后不会再更改它。它 可以 访问 doit
并依赖于它的值在调用之间保持不变,除非其他东西可以访问 doit
并进行更改。
另一方面,变量 foo
是函数的简单局部变量。每次调用该函数都会创建一个全新的 foo
,并且该函数与之前的任何 foo
都没有关系。
我正在使用闭包,我得到了这段代码:
doit = true;
aww = function() {
if(doit) {var foo; doit = false;} else {}
foo = 0; foo += 1; return foo;
}
doit
是一个变量,aww
函数仅使用 define/delcare foo
一次。
当我第一次执行 aww
时,它将 delcares foo
作为局部变量(并设置为在以后的调用中不声明它)然后它将 foo
分配给 0 并将其增加 1。并且 returns 它 (1)
我预计,下次我调用 aww
时,不会先声明 foo
变量,因此 aww
函数应该首先创建 foo
并创建它global,因为它还没有被声明,并且它被赋值给 0,前面没有任何 var。但是实际发生的事情和我的预料不一样
foo
没有变成全局的,还是局部的。
假设函数的作用域在函数执行结束后仍然存在是真的吗?
或者,如果不是,那么说只有 本地声明的变量列表 保存在某处是真的吗?
我读过有关闭包的内容,但并不完全理解它们。这个问题的答案让我比以前更清楚闭包。谢谢
你的函数:
aww = function() {
if(doit) {var foo; doit = false;} else {}
foo = 0; foo += 1; return foo;
}
被解释为好像是这样写的:
aww = function() {
var foo;
if(doit) {doit = false;} else {}
foo = 0; foo += 1; return foo;
}
函数总是return 1,因为foo
总是被函数设置为0
然后1
。变量声明被视为发生在函数的顶部。
对doit
的引用是其中与闭包有关的部分。因为该变量在函数外部,所以函数会在第一次调用时将其值切换为 false,然后不会再更改它。它 可以 访问 doit
并依赖于它的值在调用之间保持不变,除非其他东西可以访问 doit
并进行更改。
另一方面,变量 foo
是函数的简单局部变量。每次调用该函数都会创建一个全新的 foo
,并且该函数与之前的任何 foo
都没有关系。