var a = 1;
function b() {
function a() {}; // local scope
a = 10; // global scope
}
b();
alert(a);
它警告1而不是10.我想知道为什么会这样?
答案 0 :(得分:7)
函数名称和变量在Javascript中基本相同。您可以通过以下方式声明一个函数:
var a = function () {};
对于大多数意图和目的,它与function a() {}
相同。两者都在当前范围内创建符号,并使该符号的值成为一个函数。
您正在做的事情是,您使用自己的本地a
隐藏全球a
。是否通过a
或var a
定义了本地function a
,这没有区别。
答案 1 :(得分:3)
您的代码与此相同:
var a = 1;
function b() {
var a = function () {}; // local scope
a = 10;
}
b();
alert(a);
因此,本地范围函数的声明会创建一个名为a
的新局部变量,该变量最初具有分配给它的函数,但您可以将其重新分配给10
的值。此内部分配不会触及更高范围的a
。
如果外部a
定义在全局范围内,那么您可以使用以下内容为其分配:
window.a = 10;
如果它不在全球范围内,那么它已被隐藏"根据{{1}}的内在定义,无法直接从内部范围到达外部a
。
答案 2 :(得分:0)
JavaScript与其他语言不同:
JavaScript®(通常缩写为JS)是一种轻量级的解释, 具有一等functions
的面向对象语言
什么是first-class
?
allows functions to be passed around just like any other value.
因为jfriend00指出它在函数中将函数转换为局部变量,因此不会改变全局变量。