在Javascript中,全局变量不会改变函数中的值
In Javascript, global variable is not changing value inside a function
var a = 1;
function b() {
function a() {}; // local scope
a = 10; // global scope
}
b();
alert(a);
它提醒 1 而不是 10。我想知道为什么会这样?
函数名称和变量在Javascript中本质上是一回事。您可以通过以下方式声明函数:
var a = function () {};
对于大多数意图和目的,这与function a() {}
相同。两者都在当前范围内创建一个符号,并使该符号的值成为函数。
正在做的是你用你自己的本地a
来掩盖全球a
。无论此本地a
是通过 var a
还是通过 function a
定义的,都没有区别。
您的代码与此相同:
var a = 1;
function b() {
var a = function () {}; // local scope
a = 10;
}
b();
alert(a);
因此,局部作用域函数的声明会创建一个名为 a
的新局部变量,该变量最初分配了一个函数,但随后将其重新分配给 10
的值。 此内部分配不会触及范围更高的a
。
如果外部a
定义在全局范围内,则可以为其分配:
window.a = 10;
如果它不在全局范围内,那么它已经被a
的内部定义"隐藏"了,并且没有办法直接从内部范围到达外部a
。
JavaScript 与其他语言不同:
® JavaScript(通常缩写为JS)是一个轻量级的,解释的, 具有一流功能的面向对象语言
什么是first-class
?
允许函数像任何其他值一样传递。
因此,正如 jfriend00 指出的那样,它将函数本地转换为函数中的变量,从而不会更改全局变量。
相关文章:
- d3通过改变参数化函数使折线图水平动画化
- 表示改变状态的函数的Redux字
- 当道具函数改变状态时,我该如何使用redux
- 当屏幕方向改变时,重新运行javascript函数
- 在Javascript中,全局变量不会改变函数中的值
- Angular.js:为什么使用简单的帮助程序函数改变$scope会导致未插值的 {{..}} 表达式
- 使用离子框架改变全局函数的状态
- 传递给 Javascript 函数的变量不会改变
- 访问正在改变函数内部的变量(jQuery)
- 防止UglifyJS改变函数参数'的名字
- 如何改变函数内部的值?
- JQuery改变函数的问题
- & # 39;如果# 39;语句改变函数
- 改变函数中的ng-repeat作用域不会更新作用域
- 如何通过用户(输入字段)改变函数内全局变量的值
- 如何改变函数中的变量
- 什么时候jquery改变函数触发
- 为什么不改变函数内部的全局变量?
- 改变函数内部的变量
- 改变函数的第一个参数