将值返回给函数

时间:2013-06-12 16:45:52

标签: javascript function

如何将变量传递给一个函数然后将值返回给另一个函数? 我在这里有一个简单的例子,我试图解决它。第一个函数接受参数'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;
}   

2 个答案:

答案 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;
}

您需要通过将currpagepassfrom放在更高/更全局的范围内,或者将这些函数移动到与原始范围相同的范围内,从而使passto变量可以访问currpagevar 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.

以上是您问题的实际答案。

为了使事情变得更复杂,还有两件事需要考虑:

  1. 范围。参数名称仅适用于您的函数。如果它们与函数外部的某个变量名相同,那么外部变量将被参数隐藏。所以:

    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
    
  2. 这一切都适用于字符串,整数和其他简单类型。当您处理更复杂的类型时,参数名称不是传递给函数的值的别名,而是原始值的位置。所以在这种情况下,无论你对函数中的参数做什么,都会自动发生在函数外的变量中:

    var arr = [ 0, 1 ];
    function plusOne(somearr) { somearr[0] += 1; }
    plusOne(arr);
    console.log(arr[0]); // 1, as somearr references arr directly
    

    这被称为"按值传递"和"传递参考。"