2017-01-06 12 views
2

자바 스크립트의 렉시 컬 스코핑을 변경하여 함수가 정의 된 시점이 아닌 evoked되었을 때 유효한 변수 스코프를 사용할 수 있습니까? 요컨대 함수와 관련된 범위 체인을 변경할 수 있습니까?자바 스크립트에서 렉시 컬 스코핑 해제 스위치

이의 예 : 나는 오류 메시지를받지 않고 이런 일을 실행할 수 있도록하고 싶습니다 , 즉 Y가 정의되지 않습니다

function f(){y+2}; 
function g(){ 
var y=2; 
f(); 
return y; 
} 
g(); 
+1

거기에 문제가 있습니다. 인수가 있습니다. –

+1

'function f (y) {return (y + 2)};'호출을 적절하게 변경합니다. –

+0

'eval'을 사용하는 것 외에는 no. 왜 이걸 필요하다고 생각하니? –

답변

0

귀하의 질문 때문에의 오해 일 수 있습니다 당신의 발행물. yf()의 기능 범위에 정의되어 있지 않으며 값을 할당하지 않습니다. g()y은 해당 기능으로 범위가 지정됩니다. 당신의 예에서

:

function f(){ y+2 }; 
function g(){ 
    var y=2; 
    f(); 
    return y; 
} 
g(); 

g() 다음 yf()에가 런타임에 정의됩니다 글로벌 y을 사용합니다. 컴파일시에 var 키워드를 g()에 두어 전체 y을 생성하십시오.

function f(){ y+2 }; 
function g(){ 
    y=2; 
    f(); 
    return y; 
} 
g(); 

참고 : 전 세계적으로이 같은 변수가 가능 범위 만들기,하지만 권장하지. 당신의 모범이 고안되어 범위를 이해하는 데에만 사용되기 때문에 아무런 상처를 입지 않을 것입니다.