【发布时间】:2015-02-02 09:41:24
【问题描述】:
var a = 1;
function b() {
function a() {}; // local scope
a = 10; // global scope
}
b();
alert(a);
它警告 1 而不是 10。我想知道为什么会这样?
【问题讨论】:
标签: javascript
var a = 1;
function b() {
function a() {}; // local scope
a = 10; // global scope
}
b();
alert(a);
它警告 1 而不是 10。我想知道为什么会这样?
【问题讨论】:
标签: javascript
函数名和变量在 Javascript 中本质上是一样的。您可以通过以下方式声明函数:
var a = function () {};
对于大多数意图和目的而言,这与 function a() {} 相同。两者都在当前作用域中创建一个 symbol 并使该符号的值成为一个函数。
你正在做的是用你自己的本地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)是一种轻量级的、解释性的、 一流的面向对象语言functions
first-class 是什么?
allows functions to be passed around just like any other value.
正如jfriend00 指出的那样,它将函数转换为函数中的本地变量,因此不会更改全局变量。
【讨论】: