이 기초

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에서 인용합니다.

좋은 웹페이지 즐겨찾기