이 기초
6446 단어 this
var someuser = {
name: 'byvoid',
func: function() {
console.log(this.name);
}
};
var foo = {
name: 'foobar'
};
someuser.func(); // byvoid
foo.func = someuser.func;
foo.func(); // foobar
name = 'global';
func = someuser.func;
func(); // global
JavaScript에서 컨텍스트 객체는 this 포인터이며 호출된 함수가 있는 환경입니다.상하문 대상의 역할은 하나의 함수 내부에서 그 대상 자체를 인용하여 호출하는 것이다.JavaScript에서 본질적으로 함수 유형의 변수는 이 함수 실체를 가리키는 인용으로 인용 사이에 값을 부여하면 대상에 대한 복제 행위가 일어나지 않습니다.우리는 함수의 어떤 인용을 통해 이 함수를 호출할 수 있는데, 다른 점은 단지 상하문에 있을 뿐이다.위의 예를 자세히 살펴보면 서로 다른 인용을 사용하여 같은 함수를 호출할 때,this 바늘은 영원히 이 인용이 속한 대상이다.
var scope = 'top';
var f1 = function() {
console.log(scope);
};
f1(); // top
var f2 = function() {
var scope = 'f2';
f1();
};
f2(); // top
함수 작용역의 플러그인 관계는 정의할 때 결정되는 것이지 호출할 때 결정되는 것이 아니다. 즉, 자바스크립트의 작용역은 정적 작용역이고 어법 작용역이라고도 부른다. 이것은 작용역의 플러그인 관계는 문법 분석을 할 때 확정할 수 있기 때문에 운행할 때 확정할 필요가 없다.
다음 인스턴스를 참조하십시오.
function test() {
alert(arg);
var arg = 1;
}
test();
이 코드는 실행 중 "undefined"오류가 발생했습니다.
function test() {
alert(arg);
this.arg = 1;
}
test();
이 코드는 타임스 오류를 컴파일합니다. "arg is not defined"
var arg = 2;
function test() {
alert(arg);
var arg = 1;
}
test();
이 코드는 여전히 실행 중입니다. "undefined"
var arg = 2;
function test() {
alert(arg);
this.arg = 1;
}
alert(arg);
test();
alert(arg);
이 코드는 정상적으로 작동하는데, 세 번의 표시는 각각 2, 2, 1이다.가시 함수 내this.arg는 전역 변수의 값을 바꿨습니다. 즉, 현재this가 가리키는 것은 윈도우 대상입니다.즉, 위의 코드는 아래의 코드와 같다.
var arg = 2;
function test() {
alert(arg);
this.arg = 1;
}
alert(arg);
window.test();
alert(arg);
우리는 대상의 실례를 바꾸어 보았다.
var arg = 2;
function test() {
alert(arg);
this.arg = 1;
}
alert(arg);
var t = new test();
alert(t.arg);
alert(arg);
현재, 전후 전역 변수arg의 값이 변하지 않았습니다. 현재this가 가리키는 것은 t가 더 이상 윈도우가 아니라는 것을 의미합니다.우리는 다시 한 번 검증을 진행한다.
function test() {
this.arg = 1;
}
test();
alert(arg);
이때 1을 팝업하고 ok를 검증합니다!보기 함수와 변수의 기본 속주는 윈도우 대상입니다.우리는 다시 한 가지 예를 실험했다.
function test() {
var arg = 1;
alert(arg);
}
test();
alert(arg);
이 코드는 먼저 1을 팝업하고 컴파일할 때 "arg is not defined"오류가 발생했습니다. 함수 내의arg는 국부 변수일 뿐 윈도우 대상, 윈도우에 영향을 주지 않습니다.arg는 여전히 정의되지 않았습니다.우리는 상상력을 발휘하여 더욱 넓혔다.
function test() {
this.msg = function(i){alert(i);}
}
test();
msg('ok');
위의 코드가 뜻대로 "ok"!msg도 함수를 가리키는 바늘 변수에 불과하기 때문에 이름 없는 함수를 가리키며,test를 실행할 때 이 함수는 즉시 생성되며, 윈도우즈의 속성에 속합니다.함수 변수를 가리키는 비this 예를 실험하다
function test() {
var msg = function(i){alert(i);}
msg(1);
}
test();
msg(2);
위의 코드를 꺼내서 "1"을 누르고 "msg(2): msg is not defined"오류를 보고합니다.함수 내에this 수식이 없는 msg는 함수 내 부분적으로 사용할 수 있는 함수 바늘일 뿐, 외부에서 호출할 수 없습니다.요약: 함수 내의 변수 (함수를 가리키는 바늘 변수 포함) 에 대해this 키워드는 항상 이 함수를 호출하는 대상을 가리킨다.함수를 단독으로 호출할 때, 그 대상을 윈도우즈에서 인용합니다.var t = new test () 방식으로 호출할 때 호출된 대상은 t에서 인용합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바스크립트의 어둠 this에 도전한다this에 대해 다양한 각도로 도전하고 싶습니다! this는 함수 호출자에 대한 링크입니다. 그 함수 getName은 test 객체의 함수이므로 this = test 객체입니다. getName() 함수의 this를 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.