javascript、C和Python中if块中变量的作用域是什么?

What is the scope of a variable in a if block in: javascript vs C vs Python?

本文关键字:变量 作用域 是什么 if Python javascript      更新时间:2023-09-26

在这些例子中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

输出为:

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 中声明的任何内容与在之外声明的任何内容具有相同的作用域(并且Python不使用声明)。

C具有块作用域。如果在 {...}中声明静态变量,则在之外无法访问该变量。

同样适用于所有类型,如for, else, elseif

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

由let声明的变量的作用域是它们所在的块,以及任何包含的子块。这样,让与var的工作原理非常相似,主要区别在于aVar变量是整个封闭函数

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

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

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

tl;dr: C具有块作用域,JavascriptPython具有函数作用域