javascript、C和Python中if块中变量的作用域是什么?
What is the scope of a variable in a if block in: javascript vs C vs Python?
在这些例子中a变量的作用域是怎样的?它一般是如何工作的?
javascriptvar 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
输出为:
javascriptvar 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
因为javascript和Python没有块作用域;因此,在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 = 1
将a
设置为1
,而不仅仅是if
块。在C
中,在if
中声明int a = 1
,仅为if
块声明一个变量,因此您将获得输出1
,然后是0
。在python
中,a = 0
初始化了变量,但是在python
中,if
中的赋值也超出了if
块,所以你两次都会得到1
。
tl;dr: C
具有块作用域,Javascript
和Python
具有函数作用域
相关文章:
- 带有KendoUI组件的Javascript变量作用域
- Javascript变量作用域:从回调函数中提取变量
- 使用JavaScript回调函数了解变量作用域和闭包
- jquery.post和变量作用域
- 变量作用域:在函数之间传递的名称
- 在 AJAX 和 Javascript 中使用变量和变量作用域
- 节点.js/express.js中的变量作用域
- jquery ajax 回调变量作用域(为什么有些在作用域中,而另一些则不在作用域中)
- JavaScript 中的变量作用域
- ajax GET 和 POST 中的变量作用域
- Javascript:变量作用域和全局变量的弊端
- Javascript 自执行函数和变量作用域
- 拼接上的Javascript全局变量作用域/覆盖
- 在Node中与jsdom和jquery共享变量作用域
- NodeJS:代码优化和变量作用域
- Javascript数组变量作用域
- AngularJS ng控制器指令不接受javascript中的变量(作用域函数),也不给出任何错误
- 回调函数中的变量作用域呢
- JavaScript/jQuery变量作用域导致错误
- AJAX变量作用域