창의 속성인 자바스크립트 함수와 [중복]이라는 이름으로 정의된 함수의 차이점은 무엇입니까?

StackOverflow https://stackoverflow.com//questions/21013025

문제

차이점은 무엇 입니까?

function doStuff(){
    //do lots of fun stuff
}

그리고

window.doStuff = function(){
    //do lots of fun stuff
}

만약에 어떠한?

도움이 되었습니까?

해결책

첫 번째는 현재 범위 컨텍스트에 관계없이 doStuff 함수 속성을 생성합니다.그것이 창(또는 범위가 정의되지 않은 경우)이면 결과는 두 번째와 동일합니다. 브라우저 컨텍스트에서.그러나 예를 들어 현재 범위가 다른 함수 내에 있는 경우 로컬에서 사용 가능한 함수만 생성되고 효과는 하단과 동일하지 않습니다.

다른 팁

전역 범위에서 함수를 선언해도 큰 차이는 없습니다.함수를 선언하는 코드 범위가 전역이 아닌 경우 차이점이 나타납니다.예를 들어, 다른 함수 내부에서는 다음과 같습니다.

function doGlobalStuff()
{
    function doStuff(){
    // do lots of fun stuff
    }
}

doGlobalStuff() 함수 창 개체를 실행하면 doGlobalStuff() 메서드가 포함되지만 거기에는 doStuff() 메서드가 없습니다.그러나 이 함수는 창 객체에 doStuff() 메서드를 생성합니다.

function doGlobalStuff()
{
    window.doStuff = function(){
    // do lots of fun stuff
    }
}

자세한 내용을 보려면 다음과 같이 변수 및 함수 범위를 검색하세요.JavaScript에서 변수의 범위는 무엇입니까?

첫 번째 항목이 전역 범위에서 선언되는 한 이 둘 사이에는 차이가 없습니다.

첫 번째는 브라우저 컨텍스트에서 작동합니다. window 사용할 수 없습니다.또한 (할당된 변수나 메서드 키에 관계없이) 이름이 있는데, 이는 무엇보다도 스택 추적 및 재귀에 유용합니다.

두 번째는 node.js에서는 작동하지 않습니다(하지만 global 일 것이다).다음 예와 같이 자체 이름이 없으므로 재귀가 어려워집니다.

window.doStuff = function( i ){
    if( --i ){
        return window.doStuff();
    }

    return i;
}

window.doStuff에 다음과 같이 다른 것이 할당되면…

window.doStuff = 'erg';

...그러면 위 함수는 익명이고 자신을 참조할 수 없기 때문에 중단됩니다. 본질적으로 손실됩니다.

물론 두 가지를 모두 수행하는 데 방해가 되는 것은 없습니다.

window.doStuff = function doStuff(){
    //do lots of fun stuff
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top