2012-06-06 4 views
1

저는 몇 가지 Js 함수가 fn1(), fn2()라고 말합니다. 페이지가로드 데이터 액세스 JS 함수

<script > 

window.onload=fn1(); 

function fn1() 
{ 
    var list_temp=new Array(); 
    list_temp.push("testing"); 
    //etc 
} 

function fn2() 
{ 
    // Do something after getting the data from fn1() 
} 
</script>` 

가 지금은() Fn2를에서을 Fn1에 정의 된 목록을()에 액세스해야 할 때 자동으로 을 Fn1()가 호출 될 것이다. 어쨌든 할 수 있습니까? 나는 어딘가에 자바 스크립트에서 함수가 객체와 같은 방법으로 읽는 것을 기억 하는가?

+1

FYI'window.onload = fn1()'은 window.onload의 값을'fn1()'이 반환하는 것으로 설정하는 것을 말합니다; 대신에, window.onload = fn1' 또는 fn1'window.onload = function() {fn1();}'을 호출하는 익명의 함수를 원한다. – Snuffleupagus

+0

흥미 롭습니다, 감사합니다 @ Snuffleupagus – MV23

답변

3

당신은 전역 범위의 변수를 정의 할 수 있습니다,하지만 당신은 또한 closure에 두 가지 기능을 포장하고 폐쇄 변수 개인 (로컬)을 만들 수 있습니다

(function() { 
    var list_temp = []; 
    window.onload = fn1; 

    function fn1() 
    { 
     list_temp.push("testing"); 
     // etc... 
    } 

    function fn2() 
    { 
     console && console.log(list_temp); 
     // Do something after getting the data from fn1()... 
    } 
})(); 
+1

+1 내 솔루션보다 더 낫다.) – mimiz

3

단순히

window.onload 
동일한 수준에

function fn1() 

전에 최고 수준의 스크립트에서 선언

바르

var list_temp=new Array(); 

를 선언하는 것은 JS var에 범위에서 은 ... 전역 있습니다 함수 ...

+1

물론! 고맙습니다. 호기심에서 벗어나, 선언에서 선언 된 데이터를 다른 데이터 시트에서 가져올 수 있습니까? – MV23

+0

만약 당신이 var를 사용하기를 원하기 전에로드한다면? – mimiz

+2

모든 스크립트는 동일한 * global * 범위에서 실행되므로 yes입니다. – Bergi

2

window.onload=fn1();

페이지가로드 될 때 fn1이 실행되지 않습니다. 실행하면 fn1즉시이되고 window.onload에 반환 값이 할당됩니다. 정확히 x = foo();을 (를) 좋아합니다.

이제 fn2()에서 fn1()에 정의 된 목록에 액세스해야합니다. 어쨌든 할 수 있습니까?

아니요, 정의되지 않았습니다. list_tempfn1 지역의 지역입니다. fn2 (일부 공유 범위)에 액세스 할 수있는 곳에 두지 않으면 fn2에 액세스 할 수 없습니다. 물론, 당신이 list_temp 글로벌 만들 수,

(function() { 
    var list_temp=new Array(); // Or better, var list_temp = []; 

    window.onload=fn1; // No() at end 

    function fn1() 
    { 
     list_temp.push("testing"); 
     //etc 
    } 

    function fn2() 
    { 
     // Do something after getting the data from fn1() 
    } 
})(); 

또는 :

여기에 공유 범위 (그리고 window.onload 일을 고정)의 예입니다. 하지만 일반적으로 좋은 생각은 아닙니다.

+0

자바 스크립트의 전역 변수는 어떻습니까? – Wex

+1

@Wex, 모듈화. Javascript는 요즘 모듈을 혼합하는 것에 관한 것입니다 (여기서는 모든 jQuery 충돌 질문을 살펴보십시오). 가능한 한 캡슐화하는 것이 좋습니다. –

+2

@Wex : 컴퓨터 과학 분야에서 전역 변수는 널리 알려진 반 패턴입니다. 그러나 특히 브라우저에서 전역 네임 스페이스는 엄청나게 붐비고 있습니다. 'id''''''''''foo''를 가지고'div'를 가지고 있고,'foo'라고하는 전역 변수를 가지고 있다고 가정하십시오. 모든 id 값은 전역 네임 스페이스에 덤프되기 때문에 (id가있는 요소를 가리키는 속성으로), 서로 충돌합니다. –

1

당신은 기능이 함께 체인 수 있습니다

function fn1() 
{ 
var list_temp=new Array(); 
list_temp.push("testing"); 
//etc 
fn2(list_temp); 
} 

function fn2(data) 
{ 
    // Do something after getting the data from fn1() 
} 
0

가 나는 기능은 자바 스크립트 방식으로 개체에 대한 동등 어딘가에 읽는 기억 하는가?

예, 모든 함수는 공통 Function 프로토 타입을 상속하는 개체입니다. 그리고 당신은 모든 객체와 마찬가지로 그들 자신의 속성을 설정할 수 있습니다. 그러나 그것은 우리에게 도움이되지 않습니다.

은 지금 당신은 할 수 없습니다 Fn2를에서을 Fn1에 정의 된 목록()()

액세스해야합니다. list_temp의 변수 선언은 함수에 적용되며 외부에서는 사용할 수 없습니다. 그래서 당신은 할 수 중 하나

  • 이동이
  • 가 Fn2를 볼 수 있습니다 다른 변수에 목록 개체를 내보낼 Fn2를 볼 수있는 범위에서 변수 선언. 가장 쉬운 방법은 예를 들어 return 문을 사용하는 것입니다.
+0

고맙습니다 ... – MV23