2011-01-13 2 views
1

이름과 범위가 같은 두 변수를 선언하면 어떻게됩니까? 나는 동적으로 내 웹 사이트에 약간의 포틀릿을로드하고있어 각 포틀릿은 자바 스크립트 모듈을 자체 스크립트 태그를 가지고 있기 때문에JavaScript에서 이름과 범위가 같은 두 변수를 선언하면 어떻게됩니까?

var foo = (function() { 
    return { 
     alertMe: function() { 
      alert("foo1"); 
     } 
    } 
})(); 

var foo = (function() { 
    return { 
     alertMe: function() { 
      alert("foo2"); 
     } 
    } 
})(); 

foo.alertMe(); 

내가 부탁 해요. 문제는 사용자가 포틀릿을 복제 할 수 있기 때문에 위와 같은 일이 발생할 가능성이 높다는 것입니다.

+1

볼 수 있습니다 –

답변

6

어쨌든 둘 다 정의되지 않으므로 undefined 값을 갖습니다.

어쨌든 두 번째 var은 무시됩니다. 당신은 당신이 그것을 가지고 있지 않은 것처럼 같은 결과를 가지게 될 것입니다, 즉, foo은 새로운 값으로 덮어 쓰일 것입니다.

그래서, 같은 결과 당신이 한 것처럼 :

var foo = (function() { 
    alert("foo1"); 
})(); 

foo = (function() { // I'm overwriting the value of "foo" 
    alert("foo2"); 
})(); 

편집 : 변경 질문에 코드입니다. 코드를 실행하면 결과가 더 잘 보입니다. foo 변수의 첫 번째 개체 참조는 두 번째 개체에 대한 참조로 바뀝니다. 첫 번째 참조가 손실됩니다. 귀하의 예제에서

0

마지막 변수가 작동, 먼저 VAR는 무시됩니다 `var에 foo는 = (함수() { 경고 ("foo1은"); })();();

foo는 = (함수() { // 나는 "foo는" 경고 ("에서는 foo2")의 값을 덮어있어}); `

관련 문제