2014-01-28 6 views
0

이 객체 객체의 기능, 씨 크록 포드는 두 표기법을 기록으로 다음과 동일합니다 :추가 값은 자바 스크립트 함수에서

function funct1(){}; 

var funct = function funct1(){}; 

그래서 나는 개별 기능 (하지 전역 객체) 등을 취급 할 때 객체는 변수, 그것은 작동하고, 내 예는 아래에 설명되어

function testFunction(){ 
    var variable = "value"; 
} 
testFunction.value1 = "value1"; 

function testFunction2(){ 
    var variable = "value2";  
} 

alert(testFunction.value1); //returns "value1" 

setTimeout(function(){ 
    alert("setTimeout 5001: " + testFunction.value1); //returns "value1" 
    alert("setTimeout 5001 function2: " + testFunction2.value1); //returns "undefined" 
},5001); 

내가 어쩌면 시간 설정이 '진짜'시험에 긴 충분하지 않다 (함수 실행이 완료 보장하기 위해 setTimeout을 사용 ?).

이것은 함수 실행이 아닌 값을 저장하는 흥미로운 방법입니다 (함수가 종료되고 계산 된 값을 검색 할 예정이므로). 이게 맞을까요? 그것은 확립 된 코딩 관행인가?

많은 양의 데이터가 저장되고 잊어지기 시작하면 잊어 버릴 수 있으므로 스크립트가 부진해질 수 있기 때문에 메모리 누수가 발생할 수 있습니다. 사실입니까? (key:value 쌍의 변수에서와 같이) 객체 변수에 동일한 문제가 있습니까?

이전에는 사용하지 않았습니다.

+0

a)'var funct = function() {...}', "function"은 다음과 같습니다. 유효한 식별자가 아닙니다. b) 변수 * (로컬 스코프)와 * 속성 (객체)을 혼동 했습니까? – Bergi

+1

'testFunction2'가 보여주는 예는 무엇입니까? 'setTimeout'은 불필요합니다. 예제가 동 기적으로 실행되고 아무 것도 기다리지 않아도됩니다. – Bergi

+0

요점은 무엇입니까? 그리고 다시 타임 아웃이란 무엇입니까? –

답변

0

필자는 함수 실행이 완료되었는지 확인하기 위해 setTimeout을 사용했습니다 (어쩌면 시간 설정이 '실제'테스트에 충분하지 않을 수도 있습니다).

이것은 필요하지 않습니다. 예제 코드는 동 기적으로 실행되며 아무 것도 기다리지 않아도됩니다.

이것은 함수 실행 이외의 값을 저장하는 흥미로운 방법입니다. 그것은 확립 된 코딩 관행인가?

예. 이는 함수와 관련된 정적 값에 대해 종종 수행되며 공개적으로 액세스 가능해야하며 범위를 오염시키지 않아야합니다. 생성자 또는 "호출 가능한 모듈"에서 매우 일반적입니다.

한 번에 함수가 종료되고 계산 된 값을 검색 할 수 있습니다. 이게 맞을까요?

아니요. 숫자가 계산 된 값은 return입니다. 정적 인 장소에 저장하는 것은 매우 나쁜 생각입니다. 함수를 여러 번 호출하면 서로 간섭 할 수 있습니다.

많은 양의 데이터가 저장되고 잊어 버리면 스크립트가 느려지 게되므로 잊어 버릴 가능성이 있습니다. 사실입니까?

예. 그러나 잊지 않으려는 경우에만 수집되지 않은 속성에 저장합니다. 큰 데이터로는이 작업을 수행하지 않을 것입니다.

(키 : 값 쌍이있는 변수와 마찬가지로) 객체 변수에 동일한 문제가 있습니까?

이들은 속성 인이라고합니다. 유일한 차이점은 함수 객체는 평범한 객체보다 더 오래 산다는 것입니다 (사용법 때문에 GC에 의해 다르게 처리되지 않습니다)

관련 문제