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();
}