函数被调用后,其作用域的剩余部分
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
函数仅用于定义/delcare foo
一次的变量
当我第一次执行aww
时,它将foo
作为局部变量进行delcare(并设置为在将来的调用中不声明(,然后将foo
赋值为0并将其增加1。并返回(1(
我预计,下次调用aww
时,foo
变量不会首先声明,因此aww
函数应该首先创建foo
,并使其成为全局,因为它还没有声明,并且它被分配给0,之前没有任何var。但实际发生的情况与我的预期不同foo
不是全局的,它仍然是本地的。
假设函数的作用域在函数执行结束后仍然存在,这是真的吗
或者,如果不是,那么说只有本地声明变量列表保存在某个地方是真的吗
我读过关于闭包的文章,但并不完全理解它们。这个问题的答案使闭包对我来说比以前更加清晰。Thx。
您的函数:
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;
}
函数将始终返回1,因为函数总是将foo
设置为0
,然后再设置为1
。变量声明被视为发生在函数顶部。
对doit
的引用是其中与闭包有关的部分。因为该变量是函数的外部变量,所以函数在第一次调用时会将其值切换为false,然后不会再次更改。它可以访问doit
,并依赖于其值在调用之间保持不变,除非其他人可以访问doit
并进行更改。
另一方面,变量foo
是函数的一个简单局部变量。对函数的每次调用都会创建一个全新的foo
,并且该调用与之前的任何foo
都没有关系。
相关文章:
- 监视函数从服务返回不起作用,但作用域函数起作用
- 将作用域存储在JSON中
- 从控制器继承了隔离的作用域以生成可重用的指令
- 从ng模板访问作用域
- 调用私有作用域
- 对父作用域的指令更新延迟了一步
- 正在$rootScope上达到控制器作用域$在内部控制器上
- 两个指令创建新的继承的和隔离的作用域-元素得到哪个
- 这两个关于 JavaScript 作用域链的例子有什么区别?
- 在具有命名作用域的自定义Polymer元素中隐藏表行
- AngularJS指令隔离作用域
- Angularjs:修改js中的作用域,稍后在页面中使用
- dust.js:在作用域部分中使用路径
- 添加指令作用域会使其余部分不可更新
- AngularJS如何用变量动态更新部分作用域
- 函数被调用后,其作用域的剩余部分
- Angular -如何创建一个可重用的"将记录推入父作用域的窗体或部分
- 将部分字符串绑定到Angular作用域变量
- 不能在一个angular控制器的多个部分HTML场景中访问作用域变量的更新值
- 如何在一个作用域中执行JS代码的不同部分