2016-07-05 3 views
0

외부 자바 스크립트 파일에 전역 변수를 선언하고 파일을로드하는 기본 창에서 액세스 할 수있게하려고합니다.외부 js 파일 내부에서 전역 변수를 선언하는 방법은 무엇입니까?

지금까지 다음과 같은 방법 만 암시 전역 그러나, 사람들이 이제까지 암시 전역을 사용에 대해 추천하는 것

foo = 'bar'; 

제대로 작동

var foo = 'bar'; 
window.foo = 'bar'; 

을 실패했습니다. 그렇다면이 경우 어떻게해야합니까?

+0

'window.foo = 'bar'; ' – gcampbell

+0

잡아 주셔서 감사합니다. – yosefrow

+0

전역 범위 (함수 내부가 아님)에서'var foo'는 실제 전역 변수를 만들 것입니다. –

답변

0

두 가지 솔루션 모두 잘 작동해야하며 전역 범위에서 변수를 정의하지만 실제로 변수를 사용하는 스크립트 앞에 이러한 변수를 정의하는 JavaScript 파일을 포함시켜야합니다. 아마도 모든 스크립트 파일을 포함하는 것을 잊었거나 코드에 다른 오류가있는 것뿐입니다 (브라우저의 콘솔에서 Firefox의 F12 오류를 확인하십시오).

어쨌든 전역을 사용하는 것은 좋지 않습니다. 그것은 당신의 코드를 테스트하기 어렵게 만들고, 디버깅하기 어렵고, 써드 파티 자바 스크립트 라이브러리의 전역 변수와 전역 변수가 겹칠 수 있습니다.

+0

저는 IIFE를 사용하여 내 코드를 네임 스페이스에 연결하고 있으므로 모든 함수와 변수가 첨부 된 특별히 이름이 지정된 global이 하나만 있습니다. 여전히 나쁜 습관으로 간주됩니까? – yosefrow

+0

그것은 이론적으로는 그렇습니다. 여전히 나쁜 습관이지만 다른 한편으로는 많은 대중적인 프레임 워크가이 접근 방식을 사용하며 괜찮습니다. 이 방법을 사용하여 코드를 작성했는데 어떤 문제도 없었지만 요즘에는 browserify + commonjs와 같은 모듈 로더를 사용하는 것이 더 좋습니다. 네임 스페이스 이름으로 만 전역을 사용하고 있으며 브라우저 (서버 측 js가 아님)에서만 코드를 사용하려는 경우 이것이 반드시 나쁜 습관은 아니라고 생각합니다. 실제로 디자인을 단순화 할 수 있습니다. –

0

문제는 내가 IIFE를 창에 부착하고 창 대신 직접 호출하는 것이 었습니다.

window.foo = (function() { 
    return { 
     log: function() { 
      console.log('bar function'); 
     } 
    }; 
})(); 
window.foo.log(); 

참고 :이 예제는 실제로 잘 작동하지만 난 그냥 foo.log();

좀 더 나중에로 살펴 보겠습니다 사용하여 호출 할 때까지로 인해 내 인생의 일부 콘텐츠에 나를 위해 작동하지 않았다. 관심의 대상이되면서 내 코드의 어떤 부분이이 문제를 일으켰습니다.

관련 문제