구글그룹스의 jquery 포럼을 메일로 받아보는데 재미있는 질문이 올라왔다.
어떤 친구의 질문은 jquery을 보면서 공부하고 있는데 fn = eval("false||function(elem){return " + fn + "}");
이런 문법이 있다. 왜 n = Function('elem', 'return '+fn) 이렇게 하지 않고 위와 같이 했냐라는 질문이였다.
처음에 이 질문을 보고 갑자기 나도 왜 위와 같이 했을까 라는 고민을 했다.
eval("false||function(elem){return " + fn + "}"); 이 문장을 보며 의아해 했던 것은 두가지 인데
첫번째는 왜 Function을 사용하지 않았나?
두번째는 앞부분에 false||을 사용했는가? 이다.
그래서 jquery를 받아서 eval("false||function(elem){return " + fn + "}"); 이 부분을 찾아봤다.
솔직히 이해를 잘 못했다.(내공 부족)-_-;;
그러다 포럼의 John Resig을 비롯하여 다른 사람들이 올린 글을 보니 이해하기 쉬웠다.
결론은
첫번째는 Function으로 만들면 scope가 local scope가 아니라 global scope가 되기 때문이라고 한다.
즉 eval("false||function(elem){return " + fn + "}");는 함수 scope안에서 있는것들을 사용할수 있는데 Function은 global 변수를 사용해야 하기 때문이다.
두번째는 약간의 브라우져의 특성때문이다.
우리가 json을 string으로 받아서 보통 eval("("+json+")") 이렇게 처리하는 이유와 비슷하다. 그래서 처음에는 John Resig 위에 방법으로 하다가 ie,opera에서 안되서 어쩔수 없이 eval("false||function("+....+"}") 이와 같은 방법을 했다고한다.
하여간 오랫만에 건진 팁!
어떤 친구의 질문은 jquery을 보면서 공부하고 있는데 fn = eval("false||function(elem){return " + fn + "}");
이런 문법이 있다. 왜 n = Function('elem', 'return '+fn) 이렇게 하지 않고 위와 같이 했냐라는 질문이였다.
처음에 이 질문을 보고 갑자기 나도 왜 위와 같이 했을까 라는 고민을 했다.
eval("false||function(elem){return " + fn + "}"); 이 문장을 보며 의아해 했던 것은 두가지 인데
첫번째는 왜 Function을 사용하지 않았나?
두번째는 앞부분에 false||을 사용했는가? 이다.
그래서 jquery를 받아서 eval("false||function(elem){return " + fn + "}"); 이 부분을 찾아봤다.
솔직히 이해를 잘 못했다.(내공 부족)-_-;;
그러다 포럼의 John Resig을 비롯하여 다른 사람들이 올린 글을 보니 이해하기 쉬웠다.
결론은
첫번째는 Function으로 만들면 scope가 local scope가 아니라 global scope가 되기 때문이라고 한다.
즉 eval("false||function(elem){return " + fn + "}");는 함수 scope안에서 있는것들을 사용할수 있는데 Function은 global 변수를 사용해야 하기 때문이다.
두번째는 약간의 브라우져의 특성때문이다.
우리가 json을 string으로 받아서 보통 eval("("+json+")") 이렇게 처리하는 이유와 비슷하다. 그래서 처음에는 John Resig 위에 방법으로 하다가 ie,opera에서 안되서 어쩔수 없이 eval("false||function("+....+"}") 이와 같은 방법을 했다고한다.
하여간 오랫만에 건진 팁!