Lifesinger의 국경일 제목으로 돌아가겠습니다.

2956 단어 life
원제목 주소


f = function() { return true; };

g = function() { return false; };



(function() {

    if (g() && [] == ![]) {

        f = function f() { return false; };

        function g() { return true; }

    }

})();



alert(f()); // true or false ?


IE678에서


      f = function() { return true; };

      g = function() { return false; };



      (function() {

        //IE bug, ,

        // 

        function _f() { return false; };

        // 

        function _g() { return true; }

//[] == ![]  ToPrimitive

//http://www.cnblogs.com/rubylouvre/archive/2010/10/02/1841143.html

        if (_g() && [] == ![]) {

          _f = function _f() { return false; };

        }

      })();



      alert(f());//true


FF에서(여기는 좀 재미있다)


      f = function() { return true; };

      g = function() { return false; };



      (function() {

        //FF , g g, if 

        if (g() && [] == ![]) {

          f = function f() { return false; };

          function g() { return true; }

        }

      })();



      alert(f()); //true


다음은 FF가 함수 설명을 달지 않는다는 것을 증명하는 테스트 코드입니다.


     //by  

      // 

      (function(){

        alert(aaa);

        if(false){

          var aaa = "aaa"

        }

      })();

      (function(){

        try{

          alert(bbb);

        }catch(e){

          alert(" !!")

        }

        if(false){

          function bbb(){ return "bbb" }

        }

      })();

      // 

      function ccc() { alert('ccc'); }

      ccc();

      if(false) {

        function ccc() { alert('ccc '); }

      }



      function ddd() { alert('ddd'); }

      ddd();

      if(true) {

        function ddd() { alert('ddd '); }

      }




//패키지 내
(function(){
alert(aaa);
if(false){
var aaa = "aaa"
}
})();
(function(){
try{
alert(bbb);
}catch(e){
alert("이상 발생!!!")
}
if(false){
function bbb(){ return "bbb"}
}
})();
//글로벌 도메인에서
function ccc() { alert('ccc'); }
ccc();
if(false) {
function ccc () {alert ('ccc 다시 쓰기');}
}
function ddd() { alert('ddd'); }
ddd();
if(true) {
function ddd () {alert ('ddd 다시 쓰기');}
}
실행 코드
FF의 이런 행위는 마치 블록 작용역이 존재하는 것처럼 만들어졌는데, 또 속도를 추구하기 위해 수정하지 않으려는 버그인가?!
사파리 5, 오페라 10, 크롬 6


      f = function() { return true; };

      g = function() { return false; };

 

      (function() {

        function _g() { return true; }// 

        if (_g() && [] == ![]) {

          f = function() { return false; };// f

        }

      })();

 

      alert(f()); // false

좋은 웹페이지 즐겨찾기