2013년 6월 29일 토요일

Java Script(2)

* var a = (20 > 30) ? " 와...ㅋ " : " ㅋㅋㅋㅋㅋ " ;
  console.log(a);
  

* || 와 && 의 다른 활용
  var x = 20 ;
  var b = true || (x = 30);
  //  앞이 true면 뒤에는 실행하지 않고 무조건 true 
  //  앞이 false면 뒤에 x를 실행
  
  var b = true && (x = 30);
  // 앞이 true면 뒤에도 실행함.
  // 앞이 false면 뒤에 실행하지 않고 무조건 false 
  
* 함수 선언
- 리턴 타입이 없다 . => 데이터형이 없기 때문에.
- 파라미터 변수는 var 을 붙이지 않는다.
- 모든 글러벌 변수, 함수는 window 객체에 포함된다.
 


* 자바스크립트 실행 순서
- 자바스크립트는 script 엘리먼트 단위 순서대로 실행된다.
- script 엘리먼트 안에서는 함수 선언을 먼저 실행하고 => 함수 밖의 문장을 순서대로 실행한다.
- 다음 script 엘리먼트에서는 이전 script 엘리먼트에서 만든 변수나 함수에 접근 할 수 있다.
- 단, 이전에 script에서 선언하지 않은 함수를 호출할수는 없다.
- 글로벌 변수, 함수이기 때문에 .


* 함수 선언 2
- 함수 객체를 생성하는 방법
-ex) var plus = function(a,b){
return a + b;
}
- function은 함수 객체의 주소값을 리턴한다.

- 파라미터 전달.
function plus2(a,b){
return a + b;
}

- arguments 감춰진 파라미터 배열 변수
- 함수에 넘어오는 모든 값들을 배열로 저장한다.
- arguments 변수로 인해 자바스크립트는 오버로딩이 없다.

-ex) function plus3(){
return arguments[0] + arguments[1]; // 유지보수가 어렵다.
}
 
function plus4(a){
return a + arguments[1];
}
 
- 변수의 범위
- 글로벌과 함수
- 블럭이 없다.
-ex) function f1(){
var a; // 글로벌 변수
a = 10;
b = 50; // 변수가 선언 되기 전에 값을 초기화 하나 마나다.
{
a = 40; // 덮어씌어진다.
var b = 30;
}

}




* nested 함수 리턴 
- 함수를 함수 안에 정의할 수 있다.
-ex) function getOperator(op){
if(op == 'plus'){
return function(a,b){ return a+b; }
}else if(op == 'minus'){
return function(a,b){ return a-b;}
}
}

var operator = getOperator('plus');
console.log(operator(10,20));

- 함수를 파라미터로 전달
-ex) function operator(v1,v2,func){
console.log("연산결과" ,func(v1,v2));
}
function opPlus(a,b){return a+b;}
function opMinus(a,b){return a-b;}
 
operator(100,200,opPlus);
 
* function closure
- nested 함수를 위한 메모리 공간
- nested 함수가 참고하는 로컬 변수는 'closure'라는 별도의 메모리 공간(복제)에 유지된다.
-ex) function outer(basic){
var a = basic; <-- closuer라는 복산된 별도의 메모리공간에 저장된다.

return function(v){ // nested 함수
console.log(v*a);
a = v;
};
}

var myFunc =outer(100);
var myFunc2 =outer(200);

myFunc(10);
myFunc2(20);


* 파라미터 함수의 활용

-ex)
var names = ['홍길동','유관순','임꺽정']
 
function each(arr, func){
for(var i in arr){
func(i,arr[i]);
}
}
 
each(names, function(index,item){
console.log(item);
});
 




* 함수를 정의하자마자 호출하는 방법
-ex) .function display(msg){
console.log(msg);
}
 
display("홍길동");
 
.var f1 = function(msg){
console.log(msg);
};
 
f1("오호라.....");
 
.(function(msg){
console.log(msg);
})("우히히히히힣히히히....");

* eval()함수 사용
- eval(자바스크립트 코드의 문자열);
-ex) var str = " var a = 20; console.log(a);";
eval(str);
 
==> 출력결과 : 20;
 
var str = " var a = '홍길동'; console.log(a);";
eval(str);
 
==> 출력결과 : 홍길동
 
































































댓글 없음:

댓글 쓰기