【问题标题】:What is the scope of a variable in a if block in: javascript vs C vs Python? [closed]if 块中变量的范围是什么:javascript vs C vs Python? [关闭]
【发布时间】:2016-07-03 19:09:50
【问题描述】:

在这些示例中 a 变量的范围如何?它一般是如何工作的?

javascript

var a = 0;
if(true){
    var a = 1;
    console.log(a);
}
console.log(a);

C

int a = 0;
if(1){
    int a = 1;
    printf("%i ", a);
}
printf("%i ", a);

Python

a = 0
if True:
    a = 1
    print a
print a

【问题讨论】:

  • C 是块作用域(全局和块)。 Python 具有函数范围(以及类和模块范围)。 JavaScript 是函数范围的,并且没有常规变量的块范围(但它适用于letconst
  • 你自己发现了什么? 具体你不明白什么?每种语言都有足够的信息,可以通过直接搜索找到。
  • 这个问题有什么意义。已经针对每种语言提出了问题,例如What is the scope of variables in JavaScript?
  • @adeneo:实际上 Python 是对象范围的。函数、类等都是第一类对象
  • @Oriol :我知道我可以在“互联网”上搜索答案,我认为这个网站也是收集问题和答案,而不仅仅是回答不存在的问题“互联网”。

标签: javascript python c if-statement scope


【解决方案1】:

输出是:

javascript

var a = 0;
if(true){
    var a = 1;
    console.log(a);  //1
}
console.log(a);      //1

C

int a = 0;
if(1){
    int a = 1;
    printf("%i ", a);  //1
}
printf("%i ", a);      //0

Python

a = 0
if True:
    a = 1
    print a   #1
print a       #1

那是因为 javascriptPython 没有块作用域;所以在if block 中声明的任何内容都与在 block 之外声明的任何内容具有相同的范围(并且 Python 不使用声明) .

C块范围。如果您在 block {...} 内声明静态变量,则在 block 之外无法访问该变量。

对于所有 block 类型也是如此,例如 forelseelseif...

javascript 中,如果你想在 block 中声明一个独占的变量,你可以使用 let:

let 声明的变量的作用域是它们所在的块 被定义,以及在任何包含的子块中。这样,让 非常像 var。主要区别在于范围 var 变量是整个封闭函数

来源:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let

这里有很多关于 javascript 作用域的例子:https://toddmotto.com/everything-you-wanted-to-know-about-javascript-scope/

【讨论】:

    【解决方案2】:

    Javascript 中,输出将是1 两次,因为var a = 1a 设置为1,而不仅仅是if 块。在C 中,在if 中声明int a = 1if 块声明了一个变量,因此您将获得输出1,然后是0。在python a = 0 中初始化变量,但在python 中的if 中的赋值也超出了if 块,因此您将得到1 两次。

    tl;drC 具有块作用域,JavascriptPython 具有函数作用域

    【讨论】:

    • 没错。 C 有块作用域,JS 和 Python 是函数作用域。
    • @CLWill 我会将其添加为我的 tl;dr
    猜你喜欢
    • 1970-01-01
    • 2016-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多