javascript - python 和 javascript 中闭包的区别

标签 javascript python closures

在 JS 中,我们可以这样写闭包:

function f(){
var a=0;
function g(){
    alert(a++);
}
return g;
}
g=f()
g()

但是,如果我用 python 编写以下代码

def f():
    a=0
    def g():
        a+=1
        print a
    return g
g=f()
g()

然后我得到UnboundedLocalError

谁能告诉我 python 和 JS 中闭包的区别?

最佳答案

当您在 Python 中使用 a += 1 时,它指的是 g 函数范围内的局部(未初始化)变量。基本上您可以从上层作用域读取变量,但如果您尝试写入,它将引用最近作用域中的变量。要使其像您希望的那样工作,您必须使用仅存在于 Python 3 中的 nonlocal 关键字。据我所知,在 Python 2 中您不能这样做,除非您尝试使用的变量change is 是全局的,然后 global 关键字来拯救。

def f():
    a=0
    def g():
        nonlocal a
        a+=1
        print a
    return g
g=f()
g()

关于javascript - python 和 javascript 中闭包的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5910146/

相关文章:

javascript - 如何使用 javascript 通过按钮 onclick 事件更改 div HTML 标签

python - 如何使用 Python Boto3 根据带有通配符的前缀列出对象?

javascript - 闭包 - 当创建一个新的闭包时,现有的闭包会发生什么?

ios - 使用闭包?

c# - 最后,是什么触发了捕获变量的新实例?

Javascript 检查页面上所有 <span> 标签 ID

javascript - AngularJS/HTML5 嵌套表单验证

JavaScript 理解事件委托(delegate)的需要

python - Word2Vec 模型未进行训练,输入句子尝试使用列表中的句子序列和标记化单词

python - python中的str性能