다른 파일에서 변수에 액세스 할 수 있습니까?


179

first.js다른 파일 안에 있는 파일에 변수를 사용할 수 second.js있습니까?

first.js라는 변수를 포함합니다 colorcodes.


@Roki : 예를 들어, 다른 웹 사이트에서 데이터를로드 할 수 있으며이를 처리하는 스크립트는 사이트에 있습니다.<script src="http://datasource.example.net/first.js"></script><script src="second.js"></script>
Piskvor는 건물을 떠났습니다.

데이터 소스 사이트에 콜백이 없습니까? 내 말은 : 다운로드 second.js에 포함 된 내용 : ... function secondscriptFn (o) {// 무언가 / w 데이터; } ... datasource.example.net/first.js?callback=secondscriptFn 을 다운로드 한 다음 먼저 다음을 포함합니다. secondscriptFn ({back : "# fff", front : "# 888", side : "# 369"}); 더 제어하고, 글로벌 범위 버전보다 강력한 당신은 first.js의 범위를 제어 할 수 있기 때문에 ...
로키

4
jQuery를 사용하고 있고 이것을 시도하고 있다면 참고하십시오. '$ (document) .ready ()'함수의 첫 번째 파일에서 액세스하려는 변수를 넣지 않아야합니다. 그렇지 않으면 적어도 내 경험으로는 제대로로드되지 않습니다.
Collin McGuire

답변:


198

Fermin이 말했듯이 전역 범위의 변수는 선언 된 후로드 된 모든 스크립트에서 액세스 할 수 있어야합니다. window또는 전역 범위에서 속성을 사용 this하여 동일한 효과를 얻을 수도 있습니다.

// first.js
var colorCodes = {

  back  : "#fff",
  front : "#888",
  side  : "#369"

};

... 다른 파일에서 ...

// second.js
alert (colorCodes.back); // alerts `#fff`

... html 파일에서 ...

<script type="text/javascript" src="first.js"></script> 
<script type="text/javascript" src="second.js"></script> 

6
브라우저에서 window 입니다 window.colorCodes와 (전역) 객체 colorCodes이 같은 객체 그래서 - 글로벌 범위.
Piskvor 건물 왼쪽

사실 ... 내가 언급 한 이유는 비전 역 범위에서 전역 변수를 설정 해야하는 경우입니다.
Dagg Nabbit

2
HTML은 어떻습니까? html에서 나는 : <script>var variable1 = true;</script> <script src="first.js"></script>first.js가 그 변수를 볼 수 있습니까? 나는 Google 크롬 확장 프로그램에서 테스트 그리고 일을하지 않았다
USER25

@ user25, 같은 문제가 있는데 해결책을 찾았습니까?
머큐리

2
eslint를 사용하는 경우 /* global colorCodes */"... is not defined"오류 메시지를 방지하기 위해 위 줄에 추가 할 수 있습니다 .
Joseph K.

41

다음을 사용하여 첫 번째 파일에서 변수를 내보낼 수 있습니다 수출 .

//first.js
const colorCode = {
    black: "#000",
    white: "#fff"
};
export { colorCode };

그런 다음 import를 사용하여 변수를 두 번째 파일로 가져옵니다 .

//second.js
import { colorCode } from './first.js'

수출-MDN


14

위의 답변 이 마음에 들었지만 나와 함께 작동하지 않았습니다.

내가이 declaring변수 insideJQuery 이기 때문에$( document ).ready()

<script>다른 곳이 아닌 태그 안에 변수를 선언하십시오


13

이것은 작동해야합니다-firstfile에서 전역 변수를 정의하고 secondfile에서 액세스하십시오.

<script src="/firstfile.js"></script>
<script src="/secondfile.js"></script>

firstfile.js :

var colors = {
   text:'#000000',
   background:'#aaaaaa',
   something_else:'blue'
};

secondfile.js :

do_something_with(colors.background);

스크립트 파일을로드하는 순서는 일부 브라우저에서 중요합니다 (IE6, 아마도 다른 브라우저).


1
this.colors = colors와 같이 해당 변수를 객체에 첨부해야 할 수도 있습니다. 열거 형이 아닌 객체이면 값을 반환하는 함수를 만들 수 있습니다. this.getTextColor = function () {return colors.text; };
aggaton

1
로드 된 페이지에서 변수를 어떻게 업데이트 하시겠습니까? <script type = "text / javascript"> colors.background = "new col"; </ script>가 작동하지 않는 것 같습니다.
v3nt

6

Node.js를 사용하면 모듈을 통해 변수를 내보낼 수 있습니다.

//first.js
const colorCode = {
    black: "#000",
    white: "#fff"
};
module.exports = { colorCode };

그런 다음 require를 사용하여 모듈 / 변수를 두 번째 파일로 가져옵니다.

//second.js
const { colorCode } = require('./first.js')

Webpack / Babel을 사용하여 ES6 에서 importexportaproach를 사용할 수 있지만 Node.js 에서는 플래그활성화 해야 하며 .mjs 확장자를 사용합니다.



2

색상 코드를 전역 변수에 저장하면 어느 자바 스크립트 파일에서나 액세스 할 수 있어야합니다.


2

나는 이것을 조금 다르게하고있을 수 있습니다. 왜 내가이 구문을 사용하는지, 오래 전에 책에서 복사 한 것이 확실하지 않습니다. 그러나 각각의 js 파일은 변수를 정의합니다. 아무 이유없이 첫 번째 파일을 R이라고합니다.

    var R = 
    { 
        somevar: 0,
        othervar: -1,

        init: function() {
          ...
        } // end init function

        somefunction: function(somearg) {
          ...
        }  // end somefunction

        ...

    }; // end variable R definition


    $( window ).load(function() {
       R.init();
    })

그런 다음 분리하려는 큰 코드 조각이 있으면 별도의 파일과 다른 변수 이름에 넣지 만 R 변수와 함수를 계속 참조 할 수 있습니다. 나는 아무 이유없이 새로운 하나의 TD를 불렀습니다.

    var TD = 
    { 
        xvar: 0,
        yvar: -1,

        init: function() {
           ...
        } // end init function

        sepfunction: function() {
           ...
           R.somefunction(xvar);
           ...
        }  // end somefunction

        ...

    }; // end variable TD definition


    $( window ).load(function() {
       TD.init();
    })

TD 'sepfunction'에서 R.somefunction을 호출하는 것을 볼 수 있습니다. 두 스크립트를 모두로드해야하기 때문에 이것이 런타임 효율성을 제공하지는 않지만 코드 구성을 유지하는 데 도움이됩니다.


0

가장 좋은 방법은 창을 사용하는 것입니다. INITIAL_STATE

<script src="/firstfile.js">
    // first.js
    window.__INITIAL_STATE__ = {
      back  : "#fff",
      front : "#888",
      side  : "#369"
    };
</script>
<script src="/secondfile.js">
    //second.js
    console.log(window.__INITIAL_STATE__)
    alert (window.__INITIAL_STATE__);
</script>

다른 답변보다이 방법의 장점은 무엇입니까?
Boric
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.