창의 속성인 자바스크립트 함수와 [중복]이라는 이름으로 정의된 함수의 차이점은 무엇입니까?
-
21-12-2019 - |
문제
차이점은 무엇 입니까?
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
}