具有作用域函数声明它们之后申报的函数中的JavaScript变量
问题描述:
我发现,为了让我的代码工作,我必须声明所有(或至少80%),我的变量,并在本地实例化它们即使我已经一个范围函数内这样做......这是为什么?例如:具有作用域函数声明它们之后申报的函数中的JavaScript变量
$(function() {
var cUnit, fUnit, temp, wind, humidity, weatherDescrpt, wData;
cUnit = true;
fUnit = false;
$("#fUnit").click(function() {
var cUnit = true;
var fUnit = false;
toggleTemp(cUnit,fUnit);
});
function setAttribute(wData) {
cUnit = true;
fUnit = false;
temp = displayTemp(wData.main.temp,fUnit);
}
});
UPDATE --- 我相信我终于找到了问题......太多的如果toggleTemp()语句..事情似乎好走,现在
答
在这个例子中你已经表明,你其实确实需要绝对没有局部变量(与wData
参数除外):
$(function() {
$("#fUnit").click(function() {
toggleTemp(true, false);
});
function setAttribute(wData) { // looks like dead code that is called from nowhere
displayTemp(wData.main.temp, false);
}
});
当然你也可以(并且可能应该)因素出局部变量的常量。但是,你会只申报,并指定他们在你的模块范围,无处:
$(function() {
const cUnit = true;
const fUnit = false;
$("#fUnit").click(function() {
toggleTemp(cUnit, fUnit);
});
function setAttribute(wData) {
displayTemp(wData.main.temp, fUnit);
}
});
你是显示不需要本地设置变量的代码,[在这里工作(https://开头的jsfiddle达网络/ 45uhz1ee /)。您可能还有其他一些导致问题的代码。显示更多的实际代码,也许提供了一个[最小,完整,可验证的示例](https://*.com/help/mcve) –
这是不无局部变量工作的一部分吗?中所示的代码没有什么要求你的'的setAttribute()'函数,但功能是试图从外部函数中使用变量的唯一地方。你可以请[编辑]你的问题来展示一个你认为应该工作但没有的东西的独立示例,并且在代码中包含一些注释以指出哪一行出错了? – nnnnnn
@Patrick&@ NNNNNN ...我道歉,我是新来的堆叠和不知道是否被允许的地方“太多”的code..I将修改我的问题,希望能够展现在我认为这会错......此外所以我得到了一些所需的功能,但并不是所有的我已经输入你的一些建议 –