'jQuery'에 해당되는 글 2건

  1. 2008/01/24 eval vs. Function
  2. 2007/05/25 Interface Elements for jQuery

eval vs. Function

Program 2008/01/24 00:06
구글그룹스의 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("+....+"}") 이와 같은 방법을 했다고한다.

하여간 오랫만에 건진 팁!





Posted by Mixed
Prototype에게는 Script.aculo.us가 있다면 jQuery에게는 Interface Elements가 있다.

prototype이 참 편하고 좋았는데 그중에서 script.aculo.us가 있는게 더쓰기 좋았던 이유였습니다. 하지만 이젠 jQuery에게도 Interface Elements 생겼으니 한번 사용해봐야겠습니다.

script.aculo.us와 비교해서 거의 틀린것이 없습니다.특별한것은 별로 없고 거의 다 있는것이고
없더라고 이미 prototype이용해서 유사하게 나온 component들이라 막 끌리진 않습니다.
하지만 jQuery도 한번 살펴볼겸 한번 갈아 타보고 싶네용.

덧.테크노라티가 이번에 리뉴얼할때 jQuery를 사용했다고 하죠?^^;

Posted by Mixed