Javascript 返回函数的值
如何将变量传递给一个函数,然后将值返回给另一个函数? 我这里有一个简单的例子,我正在尝试解决这个问题。第一个函数接受参数“currpage”,将其作为一个数字正确地返回给第二个函数,但当我调用第二个函数时,console.log显示NaN。不确定我可能做错了什么Javascript 返回函数的值,javascript,function,Javascript,Function,如何将变量传递给一个函数,然后将值返回给另一个函数? 我这里有一个简单的例子,我正在尝试解决这个问题。第一个函数接受参数“currpage”,将其作为一个数字正确地返回给第二个函数,但当我调用第二个函数时,console.log显示NaN。不确定我可能做错了什么 $(document).ready(function () { var currpage = 1; $('p').click(function () { var xyz = passfrom(curr
$(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;
}
您正在处理两个不同的
currpage
变量,当您尝试对其执行算术运算时,会导致其中一个未定义
,从而产生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
变量置于更高/更全局的范围内,或将这些函数移动到原始currpage
所处的相同范围内,从而使其可从passfrom
和passto
访问。大概是这样的:
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 var不受外部修改。另外,我怀疑有更好的方法来做你想做的事情,但具体是什么还不清楚,所以我不能提出任何建议
如何将变量传递给一个函数,然后将值返回给另一个函数
变量只是一个存储值的小容器。当你把一个变量传递给一个函数时,你实际上是把这个变量的值传递给它。因此,在你的情况下:
passfrom(curpage);
及
都是一样的
在函数中,变量名用于访问这些值。这些名称完全独立于附加到函数外部值的任何名称(如果它甚至有名称的话)。它们更像是别名。为了区分它们和变量,我们称它们为参数。所以这个,
function passfrom(currpage) {
var newpage = parseInt(currpage)*1000;
return newpage;
}
function passfrom(myownname) {
var newpage = parseInt(myownname)*1000;
return newpage;
}
还有这个:
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
这称为“按值传递”和“按引用传递”typeof NaN
是“number”
,您应该知道。第二个var newcurr
中不需要第二个var
。无论如何:passto()
正在返回NaN
。在passto()中,您不需要将任何内容传递给passfrom(),您需要传递一个数字。已经说过了,但我再说一遍:var newcurr=passfrom()代码>我要传递的值来自第一个函数passfrom()。如何将该函数的值返回到passto()?您是对的,当我在var newcurr=passfrom()中插入值时,函数工作正常。您定义了passform
,因此它需要一个参数。如果你想传递currpage
,那么你必须先将其传递到passto
,然后再将其传递到passfrom
“再次,假设newcurr的重新声明是一个打字错误。否则,这也是错误的。”这在技术上不是错误的,只是没有必要。酷,它不知道。是的,你回答了我的问题,谢谢你提供的更多有用的信息。不客气。我在你的另一个问题中读到,你对编程相当陌生,而且自学成才,所以我想你会从一些额外的信息中受益。将来,如果您处理其他编程语言,您可能需要记住,它们在范围和按值/引用传递方面都有不同的规则。