2016년 2월 10일 수요일

[javascript]함수


/*익명 함수*/
function testFunction(){
return a();
}


function a(){
console.log("a");
}

/*기명 함수*/

var b = function(){
console.log("b");
};
testFunction();
 /*익명함수와 기명함수의 차이점
  * 익명함수는 스크립트에서 먼저 추출해서 로드 되므로 어디서나 호출이 가능 하다.
  * 기명함수는 변수에 할당되기때문에 초기화 되기전에는 호출이 불가능. error
  * */

/*콜백 함수*/
function callTenTime(callback){
for(var i = 0; i < 1; i++){
callback();
}
}
/*기명 콜백함수*/
var call = function(){

alert("콜백함수");
};

callTenTime(call);



/*익명 콜백함수*/
callTenTime(function(){
alert("콜백함수");
});

/*함수를 리턴하는 함수*/

function returnFunction(){
console.log("함수를리턴");
};


function callReturnFunction(){
return returnFunction();
};

function callReturnFunction2(){
//console.log("123123");
return (function(){
console.log("함수를리턴123123");
})();
}

function callReturnFunction3(){
//console.log("123123");
return function(){
console.log("함수를리턴123123");
};
}
//callReturnFunction();
//callReturnFunction2();
callReturnFunction3()();

/*클로저*/

function closerFunction(name){

var startText = "내 이름은";
var endText = " 입니다";

return function(){
console.log(startText + name + endText);
};
};

var closer1 = closerFunction("태경");
var closer2 =  closerFunction("지훈");
var closer3 =  closerFunction("형주");

closer1();
closer2();
closer3();

/*자바스크립트 내장함수*/

/*타이머함수*/
/*일정 시간 후 실행 */
var stopSetTimeout = setTimeout(function (){ console.log("setTimeout();");},1000);
clearTimeout(stopSetTimeout);

/*일정시간마다 실행*/
var stopSetInterval = setInterval(function (){console.log("setInterval();");},1000);
setTimeout(function(){clearInterval(stopSetInterval);},5000);

/*타이머 함수는 브라우저 자원을 활용하기 때문에 일반 함수가 모두 호출 된후 마지막에 실행되는 특징이 있음*/


/*클로저 관련 for문 오류*/

/* 반복을 통해 콜백함수를 실행할경우 */

/* 루프 */

function closerBug(i){
console.log(i);
}
/* 정상 출력*/
/*for(var i = 0; i < 10; i++){
closerBug(i);
};*/

function closerBug2(func){
func();
}

for(var i = 0; i < 5; i++){
closerBug2(function (){
console.log(i);
});
};
window.onload = function(){


var closerDivs = document.getElementsByTagName("div");
alert(closerDivs.length);

//정상
for(var i= 0; i < 3 ;i++){

(function (i){
closerDivs[i].onclick = function(){
alert(i);
};
})(i);
};

//비정상
for(var i= 0; i < 3 ;i++){


closerDivs[i].onclick = function(){
alert(i);
};

};


};


//예) closure가 아님
function foo(x) {
  var tmp = 3;
  function bar(y) {
    console.log(x + y + (++tmp));
  }
  bar(10);
}
foo(2); // 결과 값 16
foo(2); // 결과 값 16
foo(2); // 결과 값 16

//예) closure 임
function foo(x) {
  var tmp = 3;
  return function (y) {
    console.log(x + y + (++tmp));
  };
};
var bar = foo(2); // bar is now a closure.
bar(10); // 결과 값 16
bar(10); // 결과 값 17
bar(10); // 결과 값 18

var bar2 = foo(2);
bar2(10); // 결과 값 16
bar2(10); // 결과 값 17

댓글 없음:

댓글 쓰기

[lunux]리눅스 폴더별 용량 확인

리눅스 폴더별 용량 확인 조회 하고자 하는 디렉토리 리스트가있는 경로로 이동후 du -h --max-depth=1