2014-03-04 2 views
0

나는 자바 스크립트에 매우 익숙하므로 사소한 질문에 사과드립니다.자바 스크립트에서 함수 내에서 변수에 액세스하는 방법은 무엇입니까?

var foo = function() { 
    a = "10"; 
    this.b = "20"; 
}; 

foo.c = "30"; 

console.log(foo.a); // undefined 
console.log(foo.c); // prints 30. 

var foo1 = new foo(); 
console.log(foo1.b) // prints 20 

var "a"에 액세스하는 방법은 무엇입니까? 심지어 가능할까요?

+0

항상 전역 변수를 사용할 수 있습니다. – JCOC611

+0

@ JCOC611 var "a"에 액세스하는 방법은 무엇입니까? 심지어 가능할까요? – JavaDeveloper

+1

아닙니다. 이것은 사적인 범위 변수의 한 형태입니다. –

답변

2

사용하여 전역 변수 :

var a = 10; 
var foo = function() { 
    a = 15; 
    this.b = 20; 
}; 
console.log(a); // equals 10 
foo(); 
console.log(a); // equals 15 

실제로 많은 귀하의 예제처럼 함수 내에서 변수 a에 액세스하고 싶었다면 :

var foo = function() { 
    a = 10; // private member 
}; 

그 개인 멤버에 액세스 할 수있는 방법이 없습니다 . 이 방법으로 변수를 선언 할 때

밝혀, 당신은 전역 변수를 만들었습니다. console.log(a);으로 액세스 할 수 있으며 10을 반환합니다. 그러나 기능 내에 var a = 10;을 사용하면이 구성원에 액세스 할 수 없습니다.

4

사실, 같은 당신이 var와 변수 선언을 앞에하지 않는 한 그것은 글로벌 것 :

var foo = function() { 
    a = "10"; 
    this.b = "20"; 
}; 

foo(); 

console.log(a); // is 10 

을 비교 :

var foo = function() { 
    var a = "10"; // private scope 
    this.b = "20"; 
}; 

foo(); 

console.log(a); // is undefined 
+0

6502 @ 전역 (VAR로 시작하지 않음)입니다. – JCOC611

0

은 무엇 당신이 할 수있는 것은에서 개체를 반환이다 공개 멤버를 정의하는 생성자 :

function Foo() { 
    var a = '10'; 

    function getA() { 
     return a; 
    } 

    return { 
     'a': a, 
     'b': 20, 
     'getA': getA 
    }; 
} 

var foo = new Foo(); 
console.log(foo.a) // 10 
console.log(foo.b); // 20 
console.log(foo.getA()); // 10 
0

코드

console.log(foo.a); 
console.log(foo.c); 

a가 그는 "클래스"foo의 정적 필드를 설정하는 것입니다, foo.a = "10"의 동등하게 설정 될 것이라고 믿는 것을 의미한다. 자바 스크립트에서는 그렇지 않습니다.

a = "10"; 

이 전역 변수 슬롯 필요를 생성 값 "10"a 전역 변수를 설정한다. 이러한 유형의 전역 할당은 피해야하며 JSLint와 같은 도구에 의해 포착됩니다.

this.b = "20"; 

이 필드 슬롯 필요를 생성하는 기능 "20"this 매개 변수로 전달 된 객체의 필드를 설정한다. foo에 직접 전화하면 (예 : foo()new없이 전역은 전역 변수를 생성한다 thisthis.b와 같이 전달된다. 이러한 유형의 오류는 엄격 모드에서 발견 할 수 있습니다. 당신이 엄격 모드에서 실행하면, undefinedthis 매개 변수로 전달되며,이 예외가 발생합니다.

var foo1 = new foo(); 

fooprototype 속성 값에 __proto__ 속성 세트 비어있는 새 개체를 만든 다음 this 매개 변수로 새 객체를 전달 foo를 호출합니다.__proto__의 모든 필드는 개체 필드의 기본값으로 나타납니다. 이는 생성자 함수의 객체에 메소드를 추가하고 생성자 함수의 필드를 초기화하는 관례로 이어진다. 상속은 __proto__ 값과 상위 프로토 타입 객체와 객체를 구성 및 기능 생성자 함수 prototype 속성을 할당하여 시뮬레이션 할 수있다. 생성자 함수는 this 생성자 함수의 this 매개 변수로는 (apply 또는 call 사용) 전달 (new 제외) 조상의 생성자 함수를 호출합니다. ECMAScript 6은 이것을 내가 표준화 한 class 구조로 표준화했기 때문에, 내가 대략 설명한 내용으로 대략 번역됩니다.

관련 문제