2011-08-31 4 views
0

복잡한 함수를 재사용하려고하는데 그 함수 내부의 조건부 변수에 값을 바꿀 수 있으면 완벽하게 작동합니다.Javascript : 조건부 내부 함수 내 변수 값 변경

아래로 끓여 :

var func = complicated_function() { 
    // lots of code 
    if (something) { 
     var localvar = 35; 
    } 
    // lots of code 
} 

내가 다른 번호로 지역 변수를 필요합니다.

실제로 함수 자체에서 아무 것도 수정하지 않고 localvar를 다른 것에 할당하는 방법이 있습니까?

업데이트 : 대답은 예입니다! 아래 내 답변을 참조하십시오.

+0

localvar는 "많은 코드"의 다른 곳에서 사용됩니까? –

답변

0

나는 약 3 주 전에이 질문을 반 시간 이내에 모두 기본적으로는 불가능했던 나에게 말했다 오 개 답변을 얻었다.

하지만 대답은 '예'라고 발표하게되어 기쁩니다. 물론, 그것은 아마 악, 또는 적어도 매우 권할 수 있지만,이 특별한 경우에 작동 즉, 평가 사용

var newfunc = func.toString().replace('35', '42'); 
eval('newfunc = ' + newfunc); 
newfunc(); 

:

는 방법은 다음과 같습니다.

1

함수 자체에서 실제로 수정하지 않고 localvar를 다른 것으로 지정하는 방법이 있습니까?

아니요.

1

아니요. 그러나 함수 서명 (기본적으로 필수 입력 및 출력)이 변경되지 않도록 조건부로 할당 할 수 있습니다. 매개 변수를 추가하고 현재 값을 기본값으로했다 :

var func = complicated_function(myLocalVar) { 
    // lots of code 
    if (something) { 
     // if myLocalVar has not been set, use 35. 
     // if it has been set, use that value 
     var localvar = (myLocalVar === undefined)?35:myLocalVar; 
    } 
    // lots of code 
} 
+0

그 대답이 "아니오"라면,이 대답은 최소한 함수를 변경하는 문제를 줄이거 나 없애는 방법에 대한 올바른 방향을 알려줍니다. – jawns317

0

를 함수가 this.localvar를 사용하는 경우 :

var func = function() { 
    alert(this.localvar) 
    if (true) { 
     var localvar = 35; 
    } 
    // lots of code 
    alert(this.localvar) 
} 
var obj = {localvar: 10}; 
func.call(obj); // alerts 10 twice 

그렇지 않다면, 당신은 기능을 변경하지 않고 변경할 수 없습니다.

0

자바 스크립트 변수는 함수의 상단에 "푸시 (push)"됩니다. 자바 스크립트의 변수는 의 기능 범위이며 C, C++, Java 및 C#과 같은 "중괄호"범위가 아닙니다. 이것은 당신과 같은 코드 (개발자) 수동으로 정상에 그것을 추진하고있다

:

var func = complicated_function() { 
    var localvar = 0; 
    // lots of code 
    if (something) { 
     localvar = 35; 
    } 
    // lots of code 
} 

는 "최대"하나 개의 기능에 도움을 변수를 선언합니까? 적어도 선언은 격리되어 있습니다. http://jsfiddle.net/Gjjqx/

참조 크록 포드 : 여기

function whatever() { 
    var localvar = 0; 

    var func = function() { 
    var something = true; 

    // lots of code 
    if (something) { 
     localvar = 35; 
    } 
    // lots of code 
    }; 

func(); 
alert(localvar); 
} 
whatever(); 

는 jsFiddle입니다

http://javascript.crockford.com/code.html

자바 스크립트가 너무 경험이있는 프로그래머를 혼동 할 수 블록에 변수를 정의, 블록 범위가없는

다른 C 계열 언어. 함수의 맨 위에 모든 변수를 정의하십시오.

+1

당신이 찾고있는 용어는 "게양 된"것입니다. –

+0

수정. Matt 감사합니다. 이제 나는 좋은 부분을 다시 읽게 될 것입니다. –

1

당신이 전화를 사용하여이 작업을 manipilate하고 적용 할 수있는 자바 스크립트 방법이 없다 복잡한 기능을 변경하지 않고 제

. 복잡한 함수에서 함수를 재정의하거나 옵션 인 경우 새로 추가 할 수는 있지만 로컬 변수 localvar에는 액세스 할 수 없습니다.

이것은 재미를위한 것입니다. 내 진짜 대답은 여전히 ​​아니오입니다.

당신은 미친 느끼는 경우 :

var complicatedFunction = function() { 
    var i = 10; 

    var internalStuff = function() { 
    console.log(i); // 10 or 12? 
    }; 

    return internalStuff(); 

}; 

var complicatedFunction; 

eval("complicatedFunction = " + complicatedFunction.toString().replace(/i = 10/, 'i = 12')); 

complicatedFunction(); //# => 12 
관련 문제