2009-12-04 8 views
2

물어보기 전에 ... 나는 실제로 이것을 할 계획이 아닙니다. 분명한 이유는 나쁜 습관입니다. 가능하다면 나는 단지 궁금하다. 당신이 함수의 내부에있어 때함수 범위 내의 변수 변수

var var_name = 'my_var', 
    var_value = 'my_value'; 

window[var_name] = var_value; 

alert(my_var); // Works! alerts user: 'my_value' 

그러나, 당신은 'var에'키워드, 변수를 사용

자바 스크립트에서는 글로벌 범위에서 가변 변수를 만들기 위해 브래킷 구문을 사용할 수 있습니다 create가 선언 된 함수에 지역적으로 범위가 지정됩니다. 로컬 범위의 변수에 액세스하기 위해 대괄호 구문 (예 : 창)과 함께 사용할 수있는 객체가 있습니까? 이와 같은 것 :

this_function[var_name] = var_value; 

나는 의심 스럽지만, 단지 킥을 주겠다고 생각했습니다.

+0

이 코드 몇 가지 문제가있다 (그 두 문을 모두 생성 /를 window 객체에 "X"라는 속성을 설정, 동일한 결과가 있습니다.) - 그것은 "내 경고 _var "이고"my_value "는 아닙니다. – Neall

+0

참으로. 'alert (my_var)'는 스파이가 의도 한 것이어야하며, 그렇지 않으면이 요청은 확실하지 않습니다. –

+0

이 고정되었습니다. 덕분에 neall & david – spudly

답변

2

아니요, 해당 실행 컨텍스트의 "변수 개체"라는 개체의 속성인데도 불구하고 var 개의 변수를 함수 컨텍스트에 액세스하는 데 사용할 수있는 개체가 없으므로 개체에 노출 된 이름이 없으므로 액세스 할 수 없습니다 직접). 전역 컨텍스트의 var 항목은 약간의 특수한 경우이며, 스펙에 정의되어 있지만 이에 의존해서는 안됩니다. 당신이 원하는 경우

window.x = 'my value'; 

또는 : 당신은 (웹 브라우저의 경우, window) 전역 객체의 속성으로 그 변수에 액세스하려면, 명시 적 명확성을 위해, 오히려 var을 사용하는 것보다 window 속성에 할당 :

window["x"] = 'my value'; 

+0

나는 이것이 대답 일 것이라는 것을 거의 알고 있었다. 그냥 다른 사람으로부터 듣고 싶었을 경우 : – spudly

+0

원할 경우 로컬 범위의 * 객체 *를 만들고 그 방법으로 사용할 수 있습니다. 예 : function someFunc() { var localVars = {}; localVars.variable1 = 'Hello'; alert (localVars [ "variable1"]); } 자바 스크립트의 모든 기능과 마찬가지로 왜 다른 방법을 너무 지루하고 유연하게 사용할 수 있을지 확신하지 못합니다. – Graza

+0

+1 * Variable Object *에 대해 이야기 할 때, 실행 컨텍스트 생성 컨셉은 실제로 널리 알려지지 않았습니다 ... 더 깊이있는 기사 : http://is.gd/5cxyl – CMS