2013-06-12 2 views
0

변수를 한 함수에 전달한 다음 다른 함수에 값을 반환하는 방법은 무엇입니까? 나는 여기서 그것을 해결하려고하는 간단한 예를 들고있다. 첫 번째 함수는 '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

'typeof NaN'은 숫자 여야합니다. 그리고 두 번째 'var newcurr'에는 두 번째'var'가 필요 없습니다. 여하튼 :'passto()'는'NaN'을 반환합니다. –

+2

passto()에서 passfrom()에 아무 것도 전달하지 않으면 숫자를 전달해야합니다. – dandavis

+1

이미 말했지만 다시 말하면 :'var newcurr = passfrom();''<-'당신은'passfrom'에 값을 전달하지 않습니다. –

답변

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 
    

    이 "패스에 의해 가치"라고하고 "통과에 의해 참조."

+0

예, 제 질문에 답변 해 주셨고 추가 정보를 제공해 주셔서 감사합니다. – user2232681

+0

반갑습니다. 나는 당신이 다른 질문들 중 하나를 읽으면서 당신이 프로그래밍을 처음 접했고 독학하기 때문에 약간의 추가 정보로부터 이익을 얻을 것이라고 생각했다. 앞으로 다른 프로그래밍 언어를 다루는 경우 범위와 값에 대한 전달에 대해 서로 다른 규칙을 갖고 있음을 명심하십시오. – Jer

1

당신은 당신이 NaN 결과의 결과로, 그것에 산술 연산을 수행하려고 할 때 undefined 될 하나의 원인, 두 개의 서로 다른 currpage 변수를 다루고 있습니다. 자세한 설명은 아래 내 인라인 코드 주석을 참조하십시오

$(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; 
} 

을 당신은 더 높은/더 전역에 넣어 두 passfrompassto에서 변수 같은 currpage에 액세스 할 수 있도록하거나 동일한 범위로 그 기능을 이동해야하는 원래 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 var를 보호하기위한 조치를 취해야 할 것입니다. 또한, 당신이하려는 일을 할 수있는 더 좋은 방법이 있다고 생각하지만 그게 정확히 무엇인지는 확실하지 않으므로 아무 것도 제안 할 수 없습니다.

+0

* "다시 말하지만, newcurr의 재 선언은 오타입니다. 그렇지 않으면 잘못되었습니다. *"기술적으로 잘못된 것은 아니며 단지 불필요한 것입니다. –

+0

쿨, 그건 몰랐어. – FishBasketGordo

관련 문제