>  기사  >  웹 프론트엔드  >  js 함수의 새로운 호출과 일반 호출의 차이점

js 함수의 새로운 호출과 일반 호출의 차이점

一个新手
一个新手원래의
2017-09-27 10:29:591308검색

먼저 코드를 보면서 이것의 역할을 느껴보세요.

        place='out';                    
            function where(){
                    var place='in';
                    alert(place);         //in
                    alert(this.place);    //out
                    }

                    where();

place는 함수 내부의 변수를 얻고, this.place는 외부 변수 값을 얻는 것을 볼 수 있습니다. 왜 이런가요? 실제로 이것의 역할은 현재 기능을 실행하는 외부 환경 객체를 가리키는 것입니다. 실행 시 환경은 전역 환경이므로 이것이 전역(브라우저의 창)을 가리키고 this.place가 얻는 것은 전역 변수 위치입니다.

아래 코드를 통해 확인해보세요.

       place='out';
                    passer={                        var place: 'in',
                        askWhere: function(){
                            alert(this.place);   //in
                        },
                    };

                    passer.askWhere();

여기는 AskWhere가 가리키는 함수에 있습니다. 함수 실행을 위한 외부 환경은 passer 개체이므로 this는 passer 개체를 가리키며 this.place가 가져오는 내용은 다음과 같습니다.

그럼 다음 코드를 살펴보세요. 함수에서 new가 발생하는 차이점은 무엇인가요?

                    function Passer(){
                        this.place = 'in';                        this.askWhere = function(){
                            alert( this.place );    //in
                        }
                    }
                    alert(window.place);            //undefined
                    Tom = new Passer();
                    Tom.askWhere();

이전 이론적 분석에 따르면 Passer의 this가 전역을 가리키는 경우 this.place는 전역 환경에서 위치를 정의해야 합니다. window.place = undefine이 발생하는 이유는 무엇인가요?

새 통화와 일반 통화의 차이점이 여기에 반영됩니다. 실제로 새 작업 중에는 여러 단계가 수행됩니다.

                1.创建一个新的对象(并把空对象的__proto__属性设置为Passer.prototype)。

                2.将构造函数的作用域赋给新对象(此时this 指向了这个新对象)。

                3.执行构造函数中的代码(通过this 为这个新对象添加属性)

                4.返回新对象。

여기서 이것은 실제로 글로벌 상황을 가리키는 것이 아니라 새로운 개체를 가리킵니다. 그런 다음 AskWhere를 실행할 때 함수의 this도 이 새 객체의 내부를 가리킵니다.

여기 생성자 Passer가 정상적인 호출을 수행하면 결과는 초기 분석과 일치합니다.

요약: 함수에서 new를 호출할 때 이 동작이 발생하는 근본적인 이유는 새 개체가 생성되고 생성자의 범위가 새 개체에 할당되어 이 지점이 새 개체를 가리키게 되기 때문입니다. 실제로 현재 기능을 실행하는 외부 환경 객체를 가리키는 this의 역할은 변하지 않았습니다.

위 내용은 js 함수의 새로운 호출과 일반 호출의 차이점의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.