2016-09-24 6 views
0

javascript의 함수 안에있는 함수 내에서 변수에 액세스하려면 어떻게해야합니까? 자바 스크립트에서 함수 안에있는 함수 내부의 변수에 액세스 하시겠습니까?

var a; 
var surveyObjects = Parse.Object.extend(surveyObject); 
var query= new Parse.Query(surveyObjects); 
query.count({ 
    success: function(count){a = count;}, 
    error: function(error){} 
}); 
alert("count of function "+a); 

a

undefined 값을 보이고있다. 밖에 a의 값을 사용해야합니다. 좋아

+0

코드를 수정하지 않으면 변경할 수 없습니다. – GolezTrol

+2

당신이 가지고있는 코드는 무의미합니다. –

+0

내가 그래서 기능이 될 것 구문 분석을 사용하여 약속 을 사용하고있다 외부 범위의 변수/ –

답변

0

감사합니다. 변수를 전역 변수로 선언하고 내부 함수 내부에 값을 삽입 한 다음 함수 내부에서 함수 호출을 수행하여 값을 호출하는 다른 함수를 트리거합니다.

var a=0; 
var surveyObjects = Parse.Object.extend(surveyObject); 
var query= new Parse.Query(surveyObjects); 
query.count({ 
    success: function(count) {a =count; total();}, 
    error:function(error){} 
}); 

function total(){alert (a);} 
0

: 때문에 자바 스크립트, 그리고 대부분의 언어, 범위 변수, 당신은 함수 외부에서 함수 내에서 선언 된 변수에 액세스 할 수있는 방법

function one() { 
    this.two = function() { 
     var a = 10; 
     return a; 
    } 
} 

var o = new one(); 
alert(o.two()); 
+0

들 덕분에 문제를 나누었다 전역 범위를 선언 한() { query.count ({ 성공 : 기능 (계산) { c = count;}, 오류 : function (error) {}}); } 경고 (c); 나는 여기서 C의 가치를 얻을 필요가있다. 문제는 내가 구문 분석을 사용하고 약속 을 사용 그래서 기능을 하나의() { query.count ({ 성공 것입니다이다 나누었다 –

1

. 변수는 전역 범위가 아닌 함수의 범위에만 속합니다.

다행히도 함수는 호출자의 범위를 상속합니다. 따라서 함수 외부에서 변수에 액세스 할 수있는 가장 쉬운 방법은 함수 외부에서 먼저 선언 한 다음 함수 내부에서 변수를 사용하는 것입니다.

function one(){ 
    var a; 

    function two(){ 
     a = 10; 
     return a; 
    } 

    return a; 
} 

변수의 범위를 지정하는 방법에 매우주의해야합니다. 기능의 핵심은 기능을 캡슐화하고 분리하는 것입니다.

약속의 경우 약속 밖의 변수를 선언하고 성공하면 그 값을 설정할 수 있습니다.

var a; 

Parse.doSomething().then(function(data) { 
    a = data; 
}); 

편집 : 당신이 코멘트에 보여 무엇을, 당신은 비동기 문제가있는 기준으로합니다. 약속은 코드에서 순서대로 실행되지 않는 비동기 적 의미입니다. 이것이 약속이 해결되면 successerror 콜백이 호출되는 이유입니다. alert(a)은 약속 콜백 외부에 있으므로 Parse 약속을 확인할 때까지 기다리지 않고 즉시 실행되므로 a은 아직 정의되지 않았습니다. 약속 콜백에 alert(a)을 넣으면 해당 시점까지 a이 설정됩니다.

var a; 
query.count({ 
    success: function(count) { 
     a = count; 
     alert(a); 
     return a; 
    }, 
    error: function(err) {} 
}); 
+0

들 덕분에 : 기능 (수) {C = 계산;}, 오류 : 기능 (오류) {}}); } 경고 (c); 나는 여기서 C의 가치를 얻을 필요가있다. –

+0

당신은 Parse를 사용하고 있다는 질문에 명확해야합니다. 내 대답에 설명 된 것과 같은 방식으로 약속 핸들러 함수 내에서 변수에 액세스 할 수 있습니다. 또한 Parse 서비스는 사용되지 않으며 몇 개월 후에 종료됩니다. – Soviut

+0

예, 오픈 소스 서버를 구문 분석합니다. 성공 함수에서 값을 외부로 가져 오는 방법이 있습니까? –

2

암시 적 글로벌 변수 동작을 사용하여이를 수행 할 수 있습니다.

당신은 즉 그것이 전역 변수가되는 var 키워드를 사용하지 않는 자바 스크립트의 변수를 선언하지 않는 경우

function one(){ 
 
    function two(){ 
 
     a=10; 
 
    } 
 
    
 
    two(); 
 
} 
 

 
one(); 
 
console.log(a);

. 더 읽기

:

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/var#Implicit_globals_and_outer_function_scope

+1

이것은 실제로 호이 스팅과 관련이 없습니다. 호이 스팅 메커니즘은 선언문이 _first_ 만 처리되도록합니다. 따라서 응용 프로그램에서 10 행에'var a'가 있으면'ReferenceError'가 발생하지 않고 4 행에서 사용할 수 있습니다. 그러나 호이 스팅은 가변적 인 이동 범위를 만들지 않습니다. – vlaz

+0

네 말이 맞아. 나는 내 대답을 편집했다. 감사! – Tal87

0
// You can simply do it by 
function test() 
{ 
    this.name='xyz'; 
} 
var obj = new test(); 

console.log(obj.name); 
0

사용 return 문은 전 세계적으로 변수에 액세스 할 수 있습니다.

function(){ 
var k=1;//local 
return k;//global 
} 
result=k+10;//sample 
+0

pleas 샘플 코드 추가 –

관련 문제