2017-08-29 17 views
0

我发现,为了让我的代码工作,我必须声明所有(或至少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()语句..事情似乎好走,现在

+1

你是显示不需要本地设置变量的代码,[在这里工作(https://开头的jsfiddle达网络/ 45uhz1ee /)。您可能还有其他一些导致问题的代码。显示更多的实际代码,也许提供了一个[最小,完整,可验证的示例](https://stackoverflow.com/help/mcve) –

+0

这是不无局部变量工作的一部分吗?中所示的代码没有什么要求你的'的setAttribute()'函数,但功能是试图从外部函数中使用变量的唯一地方。你可以请[编辑]你的问题来展示一个你认为应该工作但没有的东西的独立示例,并且在代码中包含一些注释以指出哪一行出错了? – nnnnnn

+0

@Patrick&@ NNNNNN ...我道歉,我是新来的堆叠和不知道是否被允许的地方“太多”的code..I将修改我的问题,希望能够展现在我认为这会错......此外所以我得到了一些所需的功能,但并不是所有的我已经输入你的一些建议 –

回答

0

在这个例子中你已经表明,你其实确实需要绝对没有局部变量(与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); 
    } 
}); 
相关问题