首页 文章

在调用函数后,函数的作用范围是什么?

提问于
浏览
0

我正在使用闭包,我来到这个代码:

doit = true;
aww = function() {
    if(doit) {var foo; doit = false;} else {}
    foo = 0; foo += 1; return foo;
}

doitaww 函数用于仅定义/ delcare foo 一次的变量 .
当我第一次执行 aww 时,它将 foo 作为局部变量(并设置为在将来的调用中不声明它)然后将 foo 指定为0并将其增加1.并返回它(1)

我希望,下次我调用 aww 时, foo 变量不会先声明,所以 aww 函数应首先创建 foo 并使其成为 global ,因为它尚未声明,并且在它之前没有任何var的情况下被赋值为0 . 但真正发生的事情与我的期望不同 .
foo 不会成为全球性的,它仍然是本地的 .

假设在函数执行结束后函数的作用域仍然存在,这是真的吗?
或者如果不是,那么只有 lists of localy declared variables 被保存在某个地方是真的吗?
我读过有关闭包的内容,但并不完全理解它们 . 对这个问题的回答使得闭包对我来说比以前更加清晰 . 谢谢 .

1 回答

  • 1

    你的功能:

    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 都没有任何关系 .

相关问题