2013-11-28 5 views
0

digest 메서드를 한 번만 호출하도록 허용하고 싶습니다. 따라서 다이제스트 계산시 함수가 삭제되고 that은 함수가없는 단순 개체입니다.자바 스크립트가 호출되면 함수를 삭제해도 안전합니까?

var Content = function(filename) { 
    var that = {}; 
    var name = path.basename(filename); 

    var digest = function(callback) { 
    fs.readFile(filename, function(err, data) { 
     that.hash = crypto.createHash('sha1').update(data).digest('hex'); 
     delete that.digest; // IS THIS SAFE? 
     callback(); 
    }); 
    }; 

    that.digest = digest; 
    that.name = name; 

    return that; 
}; 

그것을 사용

var content = Content('/path/to/file'); 
content.digest(function() { 
    // content.hash is available 
}); 

이 안전하고 좋은 방법인가?

+0

가능한 더 간단한 플래그를 사용 하시겠습니까? – Grundy

답변

2

단지이 기능은 아직 거기 때문에 참조, 그것은 어떤 메모리를 해제하지 않는 것을 제거 삭제하기 때문에 예는 안전 :

제시 일반적인 어떤 믿음과는 달리, delete 연산자는 직접 해방과 아무 상관이 메모리 (간접 참조를 통해 간접적으로 만 수행합니다.)

글쎄, 이건 제 의견입니다 ... 그 코드를 읽을 때 분명히 생각하지 않습니다. 무슨 일이 일어나는 지 이해하십시오.) 그래서 나는 다른 것을 선호하여 그것을 피할 것입니다. (어떤 종류의 게으른 시작을 사용한다면 예를 들어 다른 속성을 사용할 수도 있습니다. 그 코드에서 적절한 의견으로 말했다 ...

관련 문제