我有以下代码:JavaScript变量名称相同的使用功能名称
function a(x) {
return x * 2;
}
var a;
alert(a);
为什么警报显示
function a(x) {
return x * 2
}
????如果我把var a = 4
,警报显示4 但是像这样a
将被识别为函数
为什么会发生这种情况?
我有以下代码:JavaScript变量名称相同的使用功能名称
function a(x) {
return x * 2;
}
var a;
alert(a);
为什么警报显示
function a(x) {
return x * 2
}
????如果我把var a = 4
,警报显示4 但是像这样a
将被识别为函数
为什么会发生这种情况?
功能是类型对象这是一种值。
值可以存储在变量(和属性,并作为参数传递给函数等)。
函数声明:
一个var
声明:
您的声明和var
声明均被吊销。其中只有一个为变量a
赋值。
如果使用函数名称作为变量名称,则其值由函数体替换。所以“var a”变成你的功能“a”,因此你的警报显示功能“a”。
在JavaScript两者函数声明和变量声明被提升到函数的顶部,如果在功能或全局上下文的顶部限定,如果函数之外。函数声明优先于变量声明(但不能超过变量赋值)。
函数声明覆盖变量声明升起时
首先声明一个变量:
var a; // value of a is undefined
二,a
的值是一个函数,因为函数声明优先于变量声明(但不在变量分配中):
function a(x) {
return x * 2;
}
这就是你在拨打alert(a);
时所得到的结果。
但是,如果不是声明变量,而是进行变量赋值:var a = 4;
比赋值4
优先。
你应该还记得var a
悬挂,这使得它更喜欢这个
var a; // placed
function a(x) {
return x * 2;
};
var a; // removed
alert (a); // a is replaced by function body
记住var a
悬挂,因此,如果您分配4 to a
:
var a; // placed
function a(x) {
return x * 2;
};
var a = 4; // removed
a = 4 // added
alert (a); // a is now 4
你期望什么?变量和函数在JavaScript中共享相同的名称空间,因此它们互相覆盖。 – Sirko
@Sirko我希望a未定义 – joesid
如果函数名称和变量名称相同,那么JS引擎将忽略该变量。 –