首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向函数返回值

向函数返回值
EN

Stack Overflow用户
提问于 2013-06-13 00:45:52
回答 2查看 82关注 0票数 0

如何将变量传递给一个函数,然后将值返回给另一个函数?我在这里有一个简单的例子,我试图解决这个问题。第一个函数接受参数'currpage',并将其作为数字正确返回给第二个函数,但是当我调用第二个函数时,console.log显示为NaN。不确定我可能做错了什么。

代码语言:javascript
复制
$(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;
}   
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-13 01:42:47

如何将变量传递给一个函数,然后将值返回给另一个函数?

变量只是一个用来存储值的小容器。当您将一个变量传递给一个函数时,实际上是将该变量的值传递给它。所以在你的例子中:

代码语言:javascript
复制
passfrom(curpage);

代码语言:javascript
复制
passfrom(1);

都是一样的。

在函数中,变量名用于访问这些值。这些名称完全独立于附加到函数外部的值的名称(如果它有名称的话)。它们更像是别名。为了将它们与变量区分开来,我们称它们为参数。所以这一条:

代码语言:javascript
复制
function passfrom(currpage) {
    var newpage = parseInt(currpage)*1000;
    return newpage;
}

还有这一条:

代码语言:javascript
复制
function passfrom(myownname) {
    var newpage = parseInt(myownname)*1000;
    return newpage;
}

是完全一样的。如果我们写出实际发生了什么,我们会得到这样的结果:

代码语言:javascript
复制
// var xyz = passfrom(currpage);
var xyz = value-of(passfrom(value-of(currpage))

因此,要将值传递给某个函数,您所要做的就是确保它具有这样的参数名称,以便它可以使用该值:

代码语言:javascript
复制
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,因为变量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."

票数 1
EN

Stack Overflow用户

发布于 2013-06-13 00:59:37

您正在处理两个不同的currpage变量,当您试图对其中一个变量执行算术运算时,会导致其中一个变量为undefined,从而导致NaN结果。有关进一步的解释,请参阅下面的内联代码注释:

代码语言:javascript
复制
$(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变量放在更高/更全局的作用域中,以使其可以从passfrompassto访问,或者将这些函数移动到原始currpage所在的相同作用域中。如下所示:

代码语言:javascript
复制
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变量不受外部修改。此外,我怀疑有一种更好的方法来做你想要做的事情,但不清楚具体是什么,所以我不能提出任何建议。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17070967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档