0

모두 [1]과 [2] 사이의 주요 차이점은 무엇입니까?함수 내의 변수 선언과 외부 함수 선언의 차이점

[1] (당신이 여러 기능에서 변수 사용할 수있는 기능을 외부에 선언하는 경우 내가 아는) :

var myNumber:Number = 42; 

function functionOne():void 
{ 
    trace(myNumber); 
    return; 
} 
function functionTwo():void 
{ 
    trace(myNumber); 
    return; 
} 

[2] :

function functionOne():void 
{ 
    var myNumber:Number = 42; 
    trace(myNumber); 
    return; 
} 

몇 가지 구체적인 질문 :

~ 변수 선언을 포함하는 함수를 여러 번 호출하면 변수는 어떻게됩니까?

~ [1]과 [2] 사이에 성능에 차이가 있습니까?

~ 루프 또는 조건문 내에서 변수 선언과 다른 점이 있습니까? 주석 내부에 카르마에 의해 제안

(모두 (여기)와 {여기가})

+2

http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7f9d.html ... 일반적으로, "클래스"간의 성능 차이가없는 성능에 가변 범위 – Karmacon

답변

1

의 차이는 변수의 범위이며, , 당신은 당신이 여기에서 검색하는 것을 발견 할 것이다 :

http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7f9d.html 더 구체적으로 :

~ 어떤 변수에 일어날 때 변수 declar를 포함하는 기능 ation은 여러 번 호출됩니까?

각 함수 호출에는 적절한 스택이 있으므로 동일한 함수를 호출 할 때마다 다른 변수가 만들어집니다.

~ 1과 [2] 사이에 성능 차이가 있습니까?

확실하지 않지만이 문제는 아닌 것 같습니다. 실제 차이는 코드 가독성에 있으며 함수는이 변수로 다른 함수와 상호 작용할 수 있습니다.

~ 루프 내에서 변수 선언과 다른 점이 있습니까?

(모두 (여기)와 {여기}) 여기에 같은

는 차이점은 변수를 선언 할 때, 그것은 단지 그 범위 내에서 액세스 할 수 있습니다 범위이다.

+1

섹션을 참조 "함수"변수. 문제를 일으킬 수있는 요인이 몇 가지 있습니다. 변수의 수와 변수의 크기. 이것들은 사용 된 메모리의 양과 관계가 있습니다. 예를 들어, 변수의 크기가 각각 1MB 인 1000 개 개체의 배열 인 경우 이 범위가 함수 또는 클래스 변수와 큰 차이가 있습니다. 함수 변수는 더 빨리 가비지 수집 (잠재)되고 메모리가 확보됩니다. 함수가 매초 여러 번 호출되지 않으면. –

2

C. Parcell이 암시하는 특정 조건에서 성능에 큰 차이가 있습니다.

렌더링 엔진을 생각해보십시오. 모든 프레임에 새 변수를 만들면 너무 나쁘지는 않을 것입니다.하지만이 프레임이 수만 번 함수를 호출해야한다면 어떻게 될까요?그런 다음 가비지 수집기가 마침내 시작될 때까지 많은 변수가 누적됩니다. 그러면 GC가 모든 프레임에서 실행되지 않습니다. 그러면 앱이 중단 될 수 있기 때문입니다.

그리고 그 반복을 통해 변수를 만드는 데는 변수를 할당하는 것보다 시간이 많이 걸립니다. 일반적으로, 퍼포먼스가 끝나면 길고 무거운 루프에서 (어떤 방법 으로든) 사용할 계획이라면 가능한 한 많은 클래스를 클래스에 적용하는 것이 매우 유용합니다. 그러나 어떤 경우에는 실제로는 으로 루프에 새 변수를 만들려고하므로 범위 지정/디버깅 할 때 염두에 두어야합니다.

다른 클래스의 함수를 자신의 클래스 const에 저장하는 것과 같은 원리입니다 (internal static const abs:Function = Math.abs;). 성능 차이는 미미하지만 충분한 반복 만 있으면 효과가 있습니다. 기본적으로 명령을 실행하는 데 필요한 룩업이 한 단계 더 짧습니다 (Math 대신 abs, 그 다음에 abs). 이렇게하면 컴파일하는 동안 함수의 '복사본'이 작성되므로 명령을 실행하는 데 필요한 룩업이 한 단계 단축됩니다.