python和javascrip中闭包的区别

2024-04-19 10:18:34 发布

您现在位置:Python中文网/ 问答频道 /正文

在JS中,我们可以编写如下闭包:

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

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

^{pr2}$

然后我得到无限局部误差。在

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


Tags: 代码returnvarjsfunction局部alert误差
2条回答

python 2版本:

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

    g.a=a
    return g
g=f()
g()

在Python中使用a += 1时,它引用g函数范围内的局部(未初始化)变量。基本上,您可以从上面的作用域读取变量,但若您试图编写它,它将引用最近作用域中的变量。要使它像您希望的那样工作,您必须使用nonlocal关键字,它只存在于python3中。据我所知,在Python2中,您无法做到这一点,除非您试图更改的变量是全局变量,否则global关键字会起到拯救作用。在

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

相关问题 更多 >