2014-07-24 2 views
0

는 anonimous 기능을 실행하고 (기능이 충족 정의) 및 글로벌 맥락에서 그것을 볼 수 있습니다 : 브라우저에서 실행글로벌 컨텍스트와 "이"Node.js를에 JS 코드에 따라

(function(GLOB){ 

    GLOB.met = function(s) { 
     console.log(s); 
    } 

})(this); 


met("Hi!"); 

, 작품 좋아, "Hi!"라고 표시합니다. 콘솔에. 그러나 Node.js에서 실행하면 마지막 행에서 "met is not defined"오류가 발생합니다. 그것뿐만 아니라 Node.js를 잘 작동

this.met("Hi!"); 

: 지금의 마지막 줄을 변경

.

노드에서 첫 번째 버전이 작동하지 않는 이유는 무엇입니까?

+0

이 코드 샘플은 전역 범위에있을 때 잘 작동합니다 ... 모듈 하나가 아닌 전체 범위에서 실행했는지 또는 일부 외부 닫음으로 감싸지 않았는지 확인하십시오. –

답변

1

"this"는 nodej의 대외 범위에서 전역이 아닙니다. 대신 global.varName을 사용하십시오.

GLOBAL.VAR_NAME을 자주 사용하지 않는 것이 가장 좋습니다.

브라우저와의 일관성을 유지하려면 클라이언트 측에서 global을 사용하고 js를 병합하기 위해 브라우저를 사용하는 것이 좋습니다. 그냥 내 두 센트.

+0

이것은 실제로 적합하지 않습니다. 사실이 전역 쓰는 것은 전역 범위에서 true를 반환합니다 ... –

+0

그래서 browserify는 클라이언트 측에서 require.js를 대체할까요? 널리 받아 들여지고 안정적인 도구입니까? – Aleks

+0

예 브라우저는 야후와 같은 회사에서 업계에서 사용하고 있습니다. 마찬가지로 모든 파일을 병합하여 성취했다고 말했듯이 각 페이지 나 뭔가에 대해 고유 한 파일이 필요하지만 이상적이지는 않지만 구성 할 수 있습니다. 내 프로젝트의 대부분은 라우터가있는 스파입니다. 따라서 병합 된 CSS 번들과 브라우저 화 번들을 사용하면 페이지로드 중 두 번의 동기 호출 만 발생합니다. (CSS 라이브러리 등의 일부를 자동으로 포함하도록 다른 마법을 사용했지만 스크립트 태그와 스타일 태그로 코드를 덤프하여 한 페이지에 전체 페이지를로드 할 수 있습니다.) –

관련 문제