2012-01-07 3 views
0

저는 JavaScript의 초보자이므로 잘못된 용어/이해를 용납하십시오.JavaScript의 메서드 함수 내부에서 변수에 액세스

thebest 콜백 함수 에서 ec.get 변수 내에서 변수를 추출하려고합니다.

범위에 대해 조금 읽었으며 아래 코드가 작동 할 것으로 예상했지만 함수 외부 변수 인 thebest 변수가 메서드의 함수 내부 변수와 다른 것으로 나타납니다.

var thebest = 0; 
ec.get("id", function(thebest,all) { }); 
alert(thebest); 

외부에서 다른 변수 이름을 사용해 보았지만 아무런 차이가 없었습니다. 메서드와 함수 외부에서 "가장 안쪽에있는"thebest 변수 값에 어떻게 액세스 할 수 있습니까? 감사!

문제 1 : 당신이 콜백 함수에 theBest의 값을 변경하려면, 당신은 매개 변수로 전달하여 변경할 수 없습니다 여기에 몇 가지 문제가있는 것처럼

+1

함수에 대한 인수로 정의 된 thebest 변수는 대괄호 사이의 함수 범위에만 있습니다. _function (thebest, all) _ {'여기}} –

답변

2

는 것 같습니다. 단순 변수는 값으로 전달되므로 원본을 함수에서 변경하면 원본은 변경되지 않습니다.

문제 2 : ec.get() 가정은 당신이 그것을 전달하는 콜백 함수가 훨씬 나중에까지 호출되지 않습니다 것을 의미합니다 아마 비동기의, 네트워킹 작업입니다. 즉, 경고가 발생할 때 완료 콜백 함수가 실행되지 않습니다. 그래서, 그것은 아직 아무것도 바뀌지 않을 것입니다.

문제 3 : 콜백에 인수를 전달할 수 없습니다. 그 인수를 정의하지만, ec.get()이 그런 인수를 전달하지 않으면 인수가 호출 될 때 실제로 거기에 없을 것입니다. 내부적으로 함수를 호출하는 것은 ec.get()입니다. 혼자서 콜백 인수를 결정합니다. 너는 그것을 바꿀 수 없다.

문제 4 : 로컬 또는 글로벌 변수와 같은 이름 (귀하의 예제에서 thebest)와 함수에 대한 인수를 선언하면, 당신은 인계 인수를 일으키는 이름 충돌을 만들고 그의 이름 함수의 범위를 지정하고 더 높은 수준의 변수를 액세스 할 수 없게 만듭니다. 일반적으로 범위에있는 다른 변수와 동일한 이름의 함수 인수를 명명하는 것은 좋지 않습니다. 혼란스러워하고 그 이름을 사용할 때 수정되거나 읽혀지는 것에 대해 잘못된 가정을하기 위해 여러분이나 다른 사람들이 여러분의 코드를 읽도록 요청합니다. 다음과 같이이 작업을 수행하는

한 가지 방법은 다음과 같습니다 콜백이 즉시 실행 뭔가 (비동기되지 않음) 그럼 당신은 단순히 다른 이름 변수에을 할당 할 수 있습니다

var thebest = 0; 
var all = "whatever"; 
ec.get("id", function() { 
    // use the arguments "thebest" and "all" here which are available 
    // from the higher scope. They don't need to be passed in 
    alert(thebest); 
    alert(all); 
}); 
// you can't alert on the value of thebest and all here because 
// an asychronous callback won't have yet been called and 
// won't have yet modified those values 
2

합니다. 예를 들어

var theBest = 0; 
ec.get("id", function(theBestArg,all) { theBest = theBestArg; }); 
alert(thebest); 
2

귀하의 문제는 귀하가 귀하의 기능에 대한 인수로 theBest을 재 선언한다는 것입니다.

var thebest = 0; 
ec.get("id", function(theNewBest,all) { theBest = 'new value' }); 
alert(thebest); 
관련 문제