Javascript 从函数内部更改全局变量,或通过最佳实践实现相同的效果
我试图更改JQuery项目中名为Javascript 从函数内部更改全局变量,或通过最佳实践实现相同的效果,javascript,jquery,Javascript,Jquery,我试图更改JQuery项目中名为projectCounter的变量,这样就不必为每个项目重复每个div中的按钮。如何使一个函数中的更改可供所有函数访问?这就是我到目前为止所做的: var projectCounter = 1; $('a').click(function() { function setValue() { var projectCounter = projectCounter + 1; alert(window.projectCounter); } })
projectCounter
的变量
,这样就不必为每个项目重复每个div
中的按钮。如何使一个函数中的更改可供所有函数访问?这就是我到目前为止所做的:
var projectCounter = 1;
$('a').click(function() {
function setValue() {
var projectCounter = projectCounter + 1;
alert(window.projectCounter);
}
});
我还做了一个JSfiddle:保留第一个
var
并删除函数中的一个
var projectCounter = 1;
$('a').click(function() {
function setValue() {
projectCounter = projectCounter + 1;
alert(window.projectCounter);
}
});
您的setValue()
函数从未在您发布的代码中运行。它只会在单击之后定义(因此之前不可用),并且只有在单击之后才能调用/运行它。这就是你想要的吗?如果要在单击时添加projectCounter
变量,请删除整个函数setValue()
,只保留其内容
在本例中,运行setValue()
projectCounter时,计数器将为2。
您也可以只使用
projectCounter++代码>实现与projectCounter=projectCounter+1相同的效果代码>即使在javascript运行后添加了div>a,以下代码也可以工作
这应该可以解决为什么代码不工作的问题。不过,我并不认为这是最佳实践
var projectCounter = 1;
function setValue() {
projectCounter += 1;
alert(window.projectCounter);
}
$('a').click(function(e) {
e.preventDefault();
setValue();
});
我想这就是你想要实现的。现在您可以添加其他事件来调用setValue()
。我必须说,您应该更具体地使用您所引用的标记。您的计数器在全局范围内,因此在任何地方都可见:
var projectCounter = 1;
$('a').click(function() {
alert(projectCounter++);
});
您需要从set value函数中删除var。您还应该将此函数移到.click事件之外,以便在需要时可以在其他位置使用它。当您在函数内部声明var
时,您显式地给了它一个本地范围。如果在使用变量时不使用var
,则该变量始终被视为全局变量。因此,在您的例子中,您在函数内部使用var
,这为该函数提供了一个局部范围
最后,您实际上并没有在任何地方调用setValue()。所以这个函数实际上并没有执行。你是这个意思吗
var projectCounter = 1;
$('a').click(function() {
projectCounter = projectCounter + 1;
alert(window.projectCounter);
});
删除“var”,然后:projectCounter++
您从未执行过setValue。单击事件按原样创建一个函数,然后放弃它而不执行。alert(++projectCounter)代码>是的,但是(部分)他的问题是他在本地范围内再次声明它。正确,这就是为什么我建议的代码段删除了这一行,因为同名的函数范围变量声明隐藏了全局范围变量声明。
var projectCounter = 1;
function setValue() {
projectCounter += 1;
alert(window.projectCounter);
}
$('a').click(function(e) {
e.preventDefault();
setValue();
});
var projectCounter = 1;
$('a').click(function() {
alert(projectCounter++);
});
var projectCounter = 1;
$('a').click(function() {
function setValue() {
projectCounter = projectCounter + 1;
alert(window.projectCounter);
}
});
var projectCounter = 1;
$('a').click(function() {
projectCounter = projectCounter + 1;
alert(window.projectCounter);
});