여기서 규칙이 무엇인지 확인하려면 호출 위치를 확인하여 함수가 호출될 때 이를 확인하는 방법이 실제로는 Script House의 편집자를 따라가서 이 기사를 통해 알아봅시다. 함수에서 이것이 무엇인지 결정하는 규칙입니다.
이것이 무엇인지 판단하는 것은 실제로 매우 간단합니다. 일반적인 규칙은 함수가 호출된 위치를 확인하여 함수가 호출될 때 이를 결정하는 것입니다. 이는 우선순위에 따라 다음에 설명된 규칙을 따릅니다.
Rules1. 함수를 호출할 때 new 키워드를 사용하면 함수의 this는 완전히 새로운 개체입니다.
function ConstructorExample() { console.log(this); this.value = 10; console.log(this); } new ConstructorExample(); // -> {} // -> { value: 10 }
2. Apply, Call 또는 Bind를 사용하여 함수를 호출하는 경우 함수의 this는 매개 변수로 전달된 개체입니다.
function fn() { console.log(this); } var obj = { value: 5 }; var boundFn = fn.bind(obj); boundFn(); // -> { value: 5 } fn.call(obj); // -> { value: 5 } fn.apply(obj); // -> { value: 5 }
3. 함수를 메소드로 호출하면, 즉 점 표기법을 사용하여 함수를 호출하면 이 함수를 속성으로 갖는 객체입니다. 즉, 점이 함수 호출의 왼쪽에 있는 경우 이는 점의 왼쪽에 있는 개체입니다.
var obj = { value: 5, printThis: function() { console.log(this); } }; obj.printThis(); // -> { value: 5, printThis: ƒ }
4. 함수가 순수 함수로 호출되면, 즉 위의 조건 중 어느 것도 없이 호출되면 이것이 전역 객체입니다. 브라우저에서는 이것이 window 객체입니다.
function fn() { console.log(this); } // 如果在浏览器里调用: fn(); // -> Window {stop: ƒ, open: ƒ, alert: ƒ, ...}
이 규칙은 실제로 세 번째 규칙과 동일합니다. 차이점은 메서드로 선언되지 않은 함수는 자동으로 전역 개체 창의 속성이 된다는 것입니다. 따라서 이는 실제로 암시적 메서드 호출입니다. fn()을 호출하면 실제로 브라우저는 window.fn()으로 인식하므로 이것이 window입니다.
console.log(fn === window.fn); // -> true
5. 위 규칙 중 두 가지 이상이 적용되는 경우 우선순위가 더 높은 규칙이 이 값을 설정합니다.
6. ES2015의 화살표 함수라면 위의 모든 규칙을 무시하고 생성 시 이를 포함하는 범위를 this의 값으로 받습니다. 이것이 무엇인지 확인하려면 화살표 함수를 만든 위치에서 한 줄 위로 올라가서 이것이 무엇인지 확인하세요. 화살표 함수의 this 값은 동일합니다.
const obj = { value: 'abc', createArrowFn: function() { return () => console.log(this); } }; const arrowFn = obj.createArrowFn(); arrowFn(); // -> { value: 'abc', createArrowFn: ƒ }
세 번째 규칙을 다시 살펴보면, obj.createArrowFn()을 호출할 때 createArrowFn의 이는 메서드 호출이기 때문에 obj입니다. 따라서 obj는 arrowFn에서 여기에 바인딩됩니다. 전역 범위에서 화살표 함수를 생성하면 이 값은 window가 됩니다.
규칙 적용 코드 예제를 보고 이러한 규칙을 적용해 보겠습니다. 시도해 보고 이것이 다른 함수 호출에서 무엇인지 알아낼 수 있는지 확인하십시오.
어떤 규칙이 적용되는지 확인
var obj = { value: 'hi', printThis: function() { console.log(this); } }; var print = obj.printThis; obj.printThis(); // -> {value: "hi", printThis: ƒ} print(); // -> Window {stop: ƒ, open: ƒ, alert: ƒ, ...}
obj.printThis()는 세 번째 규칙인 메서드 호출에 속합니다. 반면에 print()는 네 번째 규칙인 순수 함수 호출에 속합니다. print()의 경우 호출 시 new, 바인딩/호출/적용 또는 점 표기법을 사용하지 않았으므로 규칙 4에 해당합니다. 이것이 전역 개체 창입니다.
여러 규칙이 적용되는 경우여러 규칙이 적용되는 경우 목록에서 우선순위가 더 높은 규칙을 사용하세요.
var obj1 = { value: 'hi', print: function() { console.log(this); }, }; var obj2 = { value: 17 };
규칙 2와 규칙 3이 동시에 적용되는 경우 규칙 2가 우선 적용됩니다.
obj1.print.call(obj2); // -> { value: 17 }
규칙 1과 규칙 3이 모두 적용되면 규칙 1이 우선 적용됩니다.
new obj1.print(); // -> {}
Library일부 라이브러리에서는 때때로 의도적으로 이 값을 특정 함수에 바인딩합니다. 일반적으로 가장 유용한 값은 함수에서 여기에 바인딩됩니다. 예를 들어 jQuery는 이를 DOM 요소에 바인딩하고 콜백에서 이벤트를 트리거합니다. 라이브러리에 위 규칙을 따르지 않는 this 값이 있는 경우 해당 라이브러리의 설명서를 주의 깊게 읽어 보십시오. 바인드를 사용하여 바인딩될 가능성이 높습니다.
요약
위 내용은 JavaScript의 이 규칙에 대한 간략한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

Python 및 JavaScript의 미래 추세에는 다음이 포함됩니다. 1. Python은 과학 컴퓨팅 분야에서의 위치를 통합하고 AI, 2. JavaScript는 웹 기술의 개발을 촉진하고, 3. 교차 플랫폼 개발이 핫한 주제가되고 4. 성능 최적화가 중점을 둘 것입니다. 둘 다 해당 분야에서 응용 프로그램 시나리오를 계속 확장하고 성능이 더 많은 혁신을 일으킬 것입니다.

개발 환경에서 Python과 JavaScript의 선택이 모두 중요합니다. 1) Python의 개발 환경에는 Pycharm, Jupyternotebook 및 Anaconda가 포함되어 있으며 데이터 과학 및 빠른 프로토 타이핑에 적합합니다. 2) JavaScript의 개발 환경에는 Node.js, VScode 및 Webpack이 포함되어 있으며 프론트 엔드 및 백엔드 개발에 적합합니다. 프로젝트 요구에 따라 올바른 도구를 선택하면 개발 효율성과 프로젝트 성공률이 향상 될 수 있습니다.

예, JavaScript의 엔진 코어는 C로 작성되었습니다. 1) C 언어는 효율적인 성능과 기본 제어를 제공하며, 이는 JavaScript 엔진 개발에 적합합니다. 2) V8 엔진을 예를 들어, 핵심은 C로 작성되며 C의 효율성 및 객체 지향적 특성을 결합하여 C로 작성됩니다.

JavaScript는 웹 페이지의 상호 작용과 역학을 향상시키기 때문에 현대 웹 사이트의 핵심입니다. 1) 페이지를 새로 고치지 않고 콘텐츠를 변경할 수 있습니다. 2) Domapi를 통해 웹 페이지 조작, 3) 애니메이션 및 드래그 앤 드롭과 같은 복잡한 대화식 효과를 지원합니다. 4) 성능 및 모범 사례를 최적화하여 사용자 경험을 향상시킵니다.

C 및 JavaScript는 WebAssembly를 통한 상호 운용성을 달성합니다. 1) C 코드는 WebAssembly 모듈로 컴파일되어 컴퓨팅 전력을 향상시키기 위해 JavaScript 환경에 도입됩니다. 2) 게임 개발에서 C는 물리 엔진 및 그래픽 렌더링을 처리하며 JavaScript는 게임 로직 및 사용자 인터페이스를 담당합니다.

JavaScript는 웹 사이트, 모바일 응용 프로그램, 데스크탑 응용 프로그램 및 서버 측 프로그래밍에서 널리 사용됩니다. 1) 웹 사이트 개발에서 JavaScript는 HTML 및 CSS와 함께 DOM을 운영하여 동적 효과를 달성하고 jQuery 및 React와 같은 프레임 워크를 지원합니다. 2) 반응 및 이온 성을 통해 JavaScript는 크로스 플랫폼 모바일 애플리케이션을 개발하는 데 사용됩니다. 3) 전자 프레임 워크를 사용하면 JavaScript가 데스크탑 애플리케이션을 구축 할 수 있습니다. 4) node.js는 JavaScript가 서버 측에서 실행되도록하고 동시 요청이 높은 높은 요청을 지원합니다.

Python은 데이터 과학 및 자동화에 더 적합한 반면 JavaScript는 프론트 엔드 및 풀 스택 개발에 더 적합합니다. 1. Python은 데이터 처리 및 모델링을 위해 Numpy 및 Pandas와 같은 라이브러리를 사용하여 데이터 과학 및 기계 학습에서 잘 수행됩니다. 2. 파이썬은 간결하고 자동화 및 스크립팅이 효율적입니다. 3. JavaScript는 프론트 엔드 개발에 없어서는 안될 것이며 동적 웹 페이지 및 단일 페이지 응용 프로그램을 구축하는 데 사용됩니다. 4. JavaScript는 Node.js를 통해 백엔드 개발에 역할을하며 전체 스택 개발을 지원합니다.

C와 C는 주로 통역사와 JIT 컴파일러를 구현하는 데 사용되는 JavaScript 엔진에서 중요한 역할을합니다. 1) C는 JavaScript 소스 코드를 구문 분석하고 추상 구문 트리를 생성하는 데 사용됩니다. 2) C는 바이트 코드 생성 및 실행을 담당합니다. 3) C는 JIT 컴파일러를 구현하고 런타임에 핫스팟 코드를 최적화하고 컴파일하며 JavaScript의 실행 효율을 크게 향상시킵니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

Dreamweaver Mac版
시각적 웹 개발 도구

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기
