我有以下功能
var VisibilityNewDevice = 1
function visibilityNewDevice() {
if (VisibilityNewDevice === 1) {
toggleVisibility('buttonPressesTable'),
toggleVisibility('IconMinimize'),
toggleVisibility('IconSync');
var VisibilityNewDevice = 0;
}
}
如果我调用visibilityNewDevice()
,我会返回undefined
并且不会运行代码。但是,如果我像这样运行
if (VisibilityNewDevice === 1) {
toggleVisibility('buttonPressesTable'),
toggleVisibility('IconMinimize'),
toggleVisibility('IconSync');
var VisibilityNewDevice = 0;
}
工作正常。我很困惑为什么function
不起作用,但是当我运行if
语句时,它运行正常。
答案 0 :(得分:2)
您的函数会尝试再次定义变量。
你的
var VisibilityNewDevice = 0;
在函数的末尾应该是
VisibilityNewDevice = 0;
答案 1 :(得分:1)
它无效,因为您正在呼叫var VisibilityNewDevice = 0;
。特别是var
。这意味着if语句中的VisibilityNewDevice
没有引用您的外部变量,它引用内部变量,在执行时为undefined
。
删除if语句中的var
应该可以正常工作
答案 2 :(得分:1)
通过
var VisibilityNewDevice;
您已在函数内声明了局部变量VisibilityNewDevice。通过
var VisibilityNewDevice = 0;
您将本地变量设置为零。不需要外面的那个。
答案 3 :(得分:1)
答案是删除函数
中的muq_external
你写
var
Javascript编译
var VisibilityNewDevice = 1
function visibilityNewDevice() {
// expecting: 1 === 1
if (VisibilityNewDevice === 1) {
...
var VisibilityNewDevice = 0;
}
}
请注意,您的var VisibilityNewDevice = 1
function visibilityNewDevice() {
var VisibilityNewDevice = undefined;
// undefined === 1
if (VisibilityNewDevice === 1) {
...
VisibilityNewDevice = 0;
}
}
悬挂位于顶部,适用于您在var
内创建的任何var
。当程序进入function
时,悬挂 var
将覆盖具有相同名称的任何全局var
。
另请参阅:JavaScript Hoisting Explained
最后,当您创建私有function
时,提升并不是一个坏主意,这样您可以更好地遵循您的代码
var
答案 4 :(得分:0)
这是呼叫变量提升。
var x = 1;
function test(){
console.log(x);
var x = 3;
}
test();
这与
相同function test(){
var x;
console.log(x);
x = 3;
}