<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<title>test</title>
</head>
<body>
<script type="text/javascript" charset="utf-8">
(function(){
// this
var test=function(){
//this
return function(){
//this
};
}
(function(){
//this
var a={
p1:function(){
//this
}
};
})();
})();
</script>
</body>
</html>
답변
David Dorward는 JavaScript에 대해 이미 언급했습니다. Douglas Crockford의 Good Parts. 그 우수한 책의 섹션 4.3에서
:
함수를 호출하여 현재 기능은 새로운 기능 제어 파라미터를 전달하는 실행을 중지. 선언 된 매개 변수 외에 모든 함수 에는 this 및 인수라는 두 개의 추가 매개 변수가 수신됩니다. 이 파라미터 은 객체 지향 프로그래밍에서 매우 중요하며 그 값은 호출 패턴에 의해 결정되는 입니다. JavaScript에는 의 호출 패턴이 있습니다. 메서드 호출은 패턴이고, 함수 호출은 패턴이며, 생성자 호출은 패턴이며, 적용 호출은 패턴입니다. 패턴은 보너스 매개 변수가 으로 초기화되는 방식이 다릅니다.
가메소드 호출 패턴 : 함수는 객체의 속성으로서 저장 될 때, 우리는 호출
크록 포드는 '이'이 패턴의 각각에, 다음과 같이 결합 설명합니다 계속 그것은 방법. 메서드가 호출 될 때이 메서드는 해당 개체에 바인딩됩니다.
함수 호출 패턴 :이 패턴으로 함수를 호출하면이 함수는 전역 객체에 바인딩됩니다. 이것은 언어의 디자인에서 실수였습니다.
생성자 호출 패턴 : 새 접두사로 함수를 호출하면 함수의 프로토 타입 멤버 값에 대한 숨겨진 링크가있는 새 객체가 만들어지고이 객체가 새 객체에 바인딩됩니다. .
Apply Invocation Pattern : apply 메소드를 사용하면 함수를 호출하는 데 사용할 인수 배열을 만들 수 있습니다. 그것은 또한 우리가 이것의 가치를 선택할 수있게 해줍니다. apply 메소드는 두 개의 매개 변수를 취합니다. 첫 번째는이 값에 바인딩되어야하는 값입니다. 두 번째 매개 변수의 배열입니다.
"호출"호출 패턴 ('fn.call (context, arg1, arg2, ... argn)')에 관한 내용이 없습니까? –
@ gion_13,'this'의 관점에서 보면 "Apply Invocation Pattern"과 동등합니다. (관련 답변 참조) (http://stackoverflow.com/a/1986909/562906) – sinelaw
는 글로벌 this
줄곧 다시 바닥 함수의 this
에서 이동 범위 체인 점에서 주석
되. 그것은
(function(){
//this
var a={
p1:function()
다음
야후 니콜라스 Zakas에 의해 좋은 프리젠 테이션에 있습니다 그것은
(function(){
// this
var test=function(){
위의 this
위 다음
p1:function(){
//this
}
은이의이 예
의 의미 this
의 의미는 포함하는 기능이 이라고하는 방법이 아니라 어떻게 이라고 지었는지는입니다.
JavaScript: The Good Parts에서 작동하는 방식에 대한 훌륭한 설명이 있습니다.
짧은 버전은 함수 (m)를 객체 (o)의 메소드로 호출 할 때 this
이 o
인 짧은 버전입니다.
var o = {
m: function() {
return this;
}
}
var foo = {
bar: o.m;
}
o === o.m();
foo === foo.bar();
범위와이 포인터 할당을 이해하려면 자바 스크립트 클로저를 보는 것이 가장 좋습니다. "this"는 객체 지향 프로그래밍 이전에도 등장했지만 분명히 필수적입니다.
http://jibbering.com/faq/notes/closures/
이 식별자 해상도 범위 체인의 역할에 크게 의존하고 있으므로 개체에 대한 속성 이름의 해상도에
.클로저에 대한 간단한 설명은 ECMAScript가 내부에서 허용하는 것입니다. ; 함수 정의 및 다른 함수의 함수 기호 안에 인 함수 표현식이 있습니다. 처음에 가변 인스턴스 동안 undefined 값 할당된다 선언 로컬 변수에 대응하는 변수 객체 생성
특성은 로컬 변수의 실제 초기화가 평가 될 때까지 일어나지 않는다 함수 본문 코드를 실행하는 동안 해당하는 할당 표현식.
활성화 객체 함수 로컬 변수 대응이라는 특성 인자 속성, 변수 객체와 상기 식별자 인자처럼 처리 될 수 있도록 동일한 개체하다는 사실 변수 로컬 변수였습니다.
마지막으로 this 키워드와 함께 사용할 값이 지정됩니다. 할당 된 값이 객체를 참조하는 경우 속성 접근자는 접두어로 해당 객체의 this 키워드 참조 속성을 사용합니다. 값이 (내부적으로) 할당 된 경우 this 키워드는 을 전역 개체로 나타냅니다.
전역 실행 컨텍스트가 과 약간 다른 처리를하게되므로 인수가 없으므로 정의 된 활성화 개체를 참조 할 필요가 없습니다. 전역 실행 컨텍스트에는 범위가 필요하며 해당 범위 체인은 정확히 하나의 개체 인 글로벌 개체로 구성됩니다.전역 실행 컨텍스트는 변수 인스턴스화를 거치며, 내부 함수는 정상적인 최상위 함수 선언을 사용하여 많은 자바 스크립트 코드를 구성합니다. 전역 개체가 Variable 개체로 사용되므로 전역 적으로 선언 된 함수가 전역 개체의 속성이됩니다. 세계적으로 그렇듯이 선언 된 변수.
또한 전역 실행 컨텍스트는이 개체에 대해 글로벌 개체에 대한 참조를 사용합니다. http://jibbering.com/faq/notes/closures/ 장 의례 : 식별자 해상도, 실행 컨텍스트 및
- 1. Java 코드에서 System은 무엇을 의미합니까? 자바 코드에서
- 2. 이 오류는 무엇을 의미합니까?
- 3. 이 오류는 무엇을 의미합니까?
- 4. 이 코드는 무엇을 의미합니까?
- 5. 이 JavaScript는 무엇을 의미합니까?
- 6. 이 코드는 무엇을 의미합니까?
- 7. 이 정규식은 무엇을 의미합니까?
- 8. 이 진술은 무엇을 의미합니까?
- 9. 이 진술은 무엇을 의미합니까
- 10. 이 진술은 무엇을 의미합니까?
- 11. 이 jQuery는 무엇을 의미합니까?
- 12. 이 오류는 무엇을 의미합니까?
- 13. 이 CSS는 무엇을 의미합니까?
- 14. 이 문자들은 무엇을 의미합니까?
- 15. 이 예외는 무엇을 의미합니까?
- 16. 이 오류는 무엇을 의미합니까?
- 17. 이 표현식은 무엇을 의미합니까?
- 18. 이 스 니펫은 무엇을 의미합니까?
- 19. 이 Catch 문은 무엇을 의미합니까?
- 20. 이 절단 명령은 무엇을 의미합니까?
- 21. 이 VB6 오류는 무엇을 의미합니까?
- 22. 이 함수에서 물음표는 무엇을 의미합니까?
- 23. 이 연결 문자열은 무엇을 의미합니까?
- 24. 이 열거 형은 무엇을 의미합니까?
- 25. 이 checkstyle 메시지는 무엇을 의미합니까?
- 26. 이 -> 기호는 무엇을 의미합니까?
- 27. 이 배열 코드는 무엇을 의미합니까?
- 28. "all"이 makefile에서 무엇을 의미합니까?
- 29. 이 형식 지정자는 무엇을 의미합니까?
- 30. 이 PHP 오류는 무엇을 의미합니까?
주의 사항 범위 체인, 자바 스크립트는 광고보다 간단 할 수 있습니다 포함되어 있습니다. 이용 약관에 동의. 쿠폰은 캐나다에서는 유효하지 않습니다. – Greg
일부 코드를 붙여 넣기 만해도 좋은 질문이 아닙니다. -1 – Boldewyn