Javascript 如何访问函数中声明的变量

Javascript 如何访问函数中声明的变量,javascript,Javascript,我试图从用户那里捕获输入并从函数中调用它。我的fetchedDate在getInput()中声明。如何使其他函数可以全局访问fetchedDate的值 function getInput() { var fetchedDate = document.getElementById('dob').value; var fetchedDate = fetchedDate.split('/').reverse('').join('-'); var fetchedDate = f

我试图从用户那里捕获输入并从函数中调用它。我的
fetchedDate
getInput()
中声明。如何使其他函数可以全局访问
fetchedDate
的值

function getInput() {

    var fetchedDate = document.getElementById('dob').value;
    var fetchedDate = fetchedDate.split('/').reverse('').join('-');
    var fetchedDate = fetchedDate.replace(/\s+/g, '');
    getValues();
}

我在我的
getValues()
中使用
fetchedDate
的值,该值返回NaN

您可以在函数外部声明变量:

var-fetchedDate;
函数getInput(){
fetchedDate=document.getElementById('dob').value;
fetchedDate=fetchedDate.split('/')。reverse('').join('-');
fetchedDate=fetchedDate.replace(/\s+/g',);
getValues();
}

尽管使用全局变量通常不是最佳做法。

正如您所指出的,该变量是在函数的局部范围内定义的,外部范围无法访问。一个选项是从该函数返回
,在调用
getInput()
的地方使用它


好的选择:

getInput()
转换为助手函数。毕竟,它除了操纵DOM元素的值之外什么都不做,DOM元素随时都可以访问——它不需要直接挂接到按钮的
onClick
事件上

// returns the processed input
function getInput() {
    var fetchedDate = document.getElementById('dob').value;
    fetchedDate = fetchedDate.split('/').reverse('').join('-');
    return fetchedDate.replace(/\s+/g, '');
}

// called from button onClick
function getValues() {
    var date = getInput();
    // other code that would use `fetchedDate`
}
体面的选择:

使
getValues()
接受一个参数,以便只需将
fetchedDate
传递给它即可

function getInput() {
    var fetchedDate = document.getElementById('dob').value;
    fetchedDate = fetchedDate.split('/').reverse('').join('-');
    fetchedDate = fetchedDate.replace(/\s+/g, '');
    getValues(fetchedDate);
}

function getValues(fetchedDate) {
    // do stuff with fetchedDate
}
好的选项:

在更高的范围内声明变量,以便可以从其他函数自由访问它

var fetchedDate;

function getInput() {
    fetchedDate = document.getElementById('dob').value;
    fetchedDate = fetchedDate.split('/').reverse('').join('-');
    fetchedDate = fetchedDate.replace(/\s+/g, '');
    getValues();
}
糟糕的选项:

通过将变量附加到窗口对象,使其真正成为“全局”变量。如果不使用
var
指定声明,则这是默认行为

function getInput() {
    fetchedDate = document.getElementById('dob').value;
    fetchedDate = fetchedDate.split('/').reverse('').join('-');
    fetchedDate = fetchedDate.replace(/\s+/g, '');
    getValues();
}

您不能修改
getValues()
函数以接收作为参数的fetchedDate吗?类似于,
getValues(fetchedDate)
。另外请注意,不要在函数中声明同一变量3次。声明一次并使用变量。不,
getValues()
itslef中有一些其他函数和计算。您可以将
getInput()
重构为
getFetchedDate()
,而不是调用
getValues()
返回
fetchedDate
。因此,您可以在
getValues()
内使用该函数,以获取当前
fetchedDate
值。这不适用于函数外部的
fetchedDate
undefined@RTrikha也许你应该检查一下“声明”是什么意思。这里有一个简单的概念证明:是的,甚至我在使用变量之前也尝试过声明它。它现在工作得很好,为什么这样写就不工作了
var fetchedDate=document.getElementById('dob').value
?@RTrikha变量是在
getInput()
函数的作用域中声明的,因此它只能在该函数中访问,而不能在该函数之外的任何地方访问(因此它在
getValues()
函数中无法访问,除非您将其作为参数传递)。无法解决此问题,
getInput()
在buttongreat解释中被称为
onClick
,对于这个问题,我使用了OK选项:)
function getInput() {
    fetchedDate = document.getElementById('dob').value;
    fetchedDate = fetchedDate.split('/').reverse('').join('-');
    fetchedDate = fetchedDate.replace(/\s+/g, '');
    getValues();
}