如何将变量传递给一个函数,然后将值返回给另一个函数?我在这里有一个简单的例子,我试图解决这个问题。第一个函数接受参数'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;
} 发布于 2013-06-13 01:42:47
如何将变量传递给一个函数,然后将值返回给另一个函数?
变量只是一个用来存储值的小容器。当您将一个变量传递给一个函数时,实际上是将该变量的值传递给它。所以在你的例子中:
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,因为变量currpage被隐藏function plusTwo(别名)(currpage += 2;} plusTwo(currpage);console.log(currpage);// 3,由于currpage没有被隐藏
plusOne arr = 0,1;function plusOne( somearr += 1;} plusOne( arr );console.log(arr);// 1,因为somearr直接引用arr
这称为“按值传递”和"pass-by-reference."
发布于 2013-06-13 00:59:37
您正在处理两个不同的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;
} 不过要小心。您可能希望采取措施保护您的currpage变量不受外部修改。此外,我怀疑有一种更好的方法来做你想要做的事情,但不清楚具体是什么,所以我不能提出任何建议。
https://stackoverflow.com/questions/17070967
复制相似问题