如何将变量传递给一个函数然后将值返回给另一个函数? 我在这里有一个简单的例子,我试图解决它。第一个函数接受参数'currpage',将它作为数字正确地返回给第二个函数,但是当我调用第二个函数时,console.log显示NaN。不确定我可能做错了什么。
$(document).ready(function () {
var currpage = 1;
$('p').click(function () {
var xyz = passfrom(currpage); //pass var to function and return value
console.log(xyz); //returns correct value
var abc = passto();
console.log(abc); //NaN
})
})
function passfrom(currpage) {
var newpage = parseInt(currpage) * 1000;
return newpage;
}
function passto() {
var newcurr = passfrom();
var newcurr = newcurr * 1000;
console.log(typeof (newcurr)); //number
return newcurr;
}
答案 0 :(得分:1)
您正在处理两个不同的currpage
变量,当您尝试对其执行算术时会导致一个undefined
,从而产生NaN
结果。有关详细说明,请参阅下面的内联代码注释:
$(document).ready(function() {
var currpage=1; // Local to this function, because of the var keyword.
...
})
}) // I'm assuming this extra closing brace and paren is a typo.
// Otherwise, your code example has a syntax error or is incomplete.
function passfrom(currpage) {
// currpage is the name of the parameter to passfrom.
// It happens to have the same name as a local var in
// the document.ready callback above, but the two are
// not the same.
var newpage = parseInt(currpage)*1000;
return newpage;
}
function passto() {
// passfrom is called with an implicit 'undefined' argument.
// Thus, undefined will be used in the arithmetic ops and produce NaN.
var newcurr = passfrom();
// Don't need the var keyword below.
var newcurr = newcurr * 1000;
console.log(typeof(newcurr)); //number
return newcurr;
}
您需要通过将currpage
和passfrom
放在更高/更全局的范围内,或者将这些函数移动到与原始范围相同的范围内,从而使passto
变量可以访问currpage
和var currpage;
$(document).ready(function () {
$('p').click(function () {
var xyz = passfrom(1); //pass var to function and return value
console.log(xyz); //returns correct value
var abc = passto();
console.log(abc); //NaN
})
})
// Rename the param so there isn't a naming conflict.
function passfrom(currpageParam) {
// If the param is a number, reset the global var.
if (typeof currpageParam == 'number') { currpage = currpageArg; }
var newpage = parseInt(currpage) * 1000;
return newpage;
}
function passto() {
var newcurr = passfrom();
newcurr = newcurr * 1000;
console.log(typeof (newcurr)); //number
return newcurr;
}
{{1}}就在。这样的事情:
{{1}}
但要小心。您可能希望采取措施保护您的currpage var免受外部修改。此外,我怀疑有更好的方法来做你想做的事情,但目前尚不清楚究竟是什么,所以我无法提出任何建议。
答案 1 :(得分:1)
如何将变量传递给一个函数,然后将值返回给另一个函数?
变量只是存储值的小容器。将变量传递给函数时,实际上是将该变量的值传递给它。所以在你的情况下:
passfrom(curpage);
和
passfrom(1);
是一样的。
在函数中,变量名用于访问这些值。这些名称完全独立于附加到函数外部的值的任何名称(如果它甚至有名称)。它们更像是别名。为了将它们与变量区分开来,我们称它们为参数。所以这一个:
function passfrom(currpage) {
var newpage = parseInt(currpage)*1000;
return newpage;
}
和这一个:
function passfrom(myownname) {
var newpage = parseInt(myownname)*1000;
return newpage;
}
完全一样。如果我们要写出实际发生的事情,我们就会得到这个:
// var xyz = passfrom(currpage);
var xyz = value-of(passfrom(value-of(currpage))
所以你要做的就是将值传递给某个函数,就是要确保它有一个可以使用该值的参数名称:
function passto(myalias) {
console.log(myalias);
}
passto(xyz); // writes 1000 to the console.
以上是您问题的实际答案。
为了使事情变得更复杂,还有两件事需要考虑:
范围。参数名称仅适用于您的函数。如果它们与函数外部的某个变量名相同,那么外部变量将被参数隐藏。所以:
var currpage = 1;
function plusOne(currpage) { curpage += 1; }
plusOne(currpage);
console.log(currpage); // 1, as the variable currpage was hidden
function plusTwo(othername) ( currpage += 2; }
plusTwo(currpage);
console.log(currpage); // 3, as currpage was not hidden
这一切都适用于字符串,整数和其他简单类型。当您处理更复杂的类型时,参数名称不是传递给函数的值的别名,而是原始值的位置。所以在这种情况下,无论你对函数中的参数做什么,都会自动发生在函数外的变量中:
var arr = [ 0, 1 ];
function plusOne(somearr) { somearr[0] += 1; }
plusOne(arr);
console.log(arr[0]); // 1, as somearr references arr directly
这被称为"按值传递"和"传递参考。"