공지

레이블이 dojo인 게시물을 표시합니다. 모든 게시물 표시
레이블이 dojo인 게시물을 표시합니다. 모든 게시물 표시

2006년 9월 3일 일요일

이상한 나라의 자바스크립트(2)

<html>
<head>
<script type="text/javascript">
var a = function (){
alert("a is called");
}
var b = undefined;
var sometest = b||a;
alert(sometest);
</script>
</head>
<body>

</body>
</html>



위에 코드에서 보면
sometest는 일반적으로 Boolean 값이 나와야 할 것이다.

msdn을 보시면..

그런데~~!! 결과를 보면 ~!!!

" || " operator 가 다음과 같이 작동 하는 것 같다..

obj || obj2 :
1) obj 가 true로 판별되면(msdn) obj를 리턴  
2) obj 가 false, obj2 가 true 면 obj2 를 리턴
3) 둘다 false 면 false?( 귀찬아서 확인 안해봄)

정말 이상한 나라의 자바 스크립트.....

2006년 7월 10일 월요일

이상한 나라의 자바스크립트

요즘 한장 DOJO 프레임웤 [각주]http://dojotoolkit.org/[/각주]을 보고 있다........

그래도 남의 코드 보고 베끼는 것은 자신있다고 생각하고 있었는데 아래 같은 코드를 보고 이해가 안되는 ~~~상황 발생...

dojo.render = (function(){
function vscaffold(prefs, names){
var tmp = {
  capable: false,
  support: {
  builtin: false,
  plugin: false
  },
  prefixes: prefs
};
for(var prop in names){
  tmp[prop] = false;
}
return tmp;
}

return {
name: "",
ver: dojo.version,
os: { win: false, linux: false, osx: false },
html: vscaffold(["html"], ["ie", "opera", "khtml", "safari", "moz"]),
svg: vscaffold(["svg"], ["corel", "adobe", "batik"]),
vml: vscaffold(["vml"], ["ie"]),
swf: vscaffold(["Swf", "Flash", "Mm"], ["mm"]),
swt: vscaffold(["Swt"], ["ibm"])
};
})();
잘 정리해서 써보면
dojo.render = ( function(){
나불나불
})();// <== 요것이 머냐? 이해가 안된다.
언듯 보면 render 란 놈을 함수로 만드는 코드 처럼 보인다.
그런데 맨아래 '()' 이넘과 함수 정의를 감싸는 '()' 가 도무지 이해가 안되는 상황... ㅠㅠ
다시 아는 그대로 정리를 해보니

dojo.render = ( 익명함수 ) ();

이런 식이다... ㅠㅠ

결국 render에 익명함수의 실행 결과를 넣으란 이야기....
위의 전문을 보아 하니 대략 render는 객체[각주] 자바스크립트에서 a={  } 는 객체를 의미/참고로 a=[] 는 배열 [/각주]이고 위의 코드는 임시 생성자 인거로 결론을 내렸다.

즉
dojo.render = ( function(){
각종 초기화;
return { 객체 생성부 이 구조가 render에 들어감 };
})()/*앞의 익명 함수를 실행한 결과임*/;