반응형


call, apply, bind : 함수 호출 방식과 관계없이 this를 지정할 수 있음

1. call : call메서드는 모든 함수에서 사용할 수 있으며, this를 특정값으로 지정할 수 있습니다.
 
const mike = {
  name : "Mike",
};

const tom = {
  name : "Tom",
};

function showThisName() {
  console.log(this.name);
}

showThisName();
showThisName.call(mike);
showThisName.call(tom);

-----------------------------------------------------------------------------------------------------

const mike = {
  name : "Mike",
};

const tom = {
  name : "Tom",
};

function showThisName() {
  console.log(this.name);
}

function update(birthYear, occupation) {
  this.birthYear = birthYear;
  this.occupation = occupation;
}

update.call(mike, 1999, "singer"); 
console.log(mike);

update.call(tom, 2002, "teacher"); 
console.log(tom);

**********************************************************************************************************
**********************************************************************************************************

2. apply : apply는 함수 매개변수를 처리하는 방법을 제외하면 call과 완전히 같습니다.
call은 일반적인 함수와 마찬가지로 매개변수를 직접 받지만, apply는 매개변수를 배열로 받습니다.

const mike = {
  name : "Mike",
};

const tom = {
  name : "Tom",
};

function showThisName() {
  console.log(this.name);
}

function update(birthYear, occupation) {
  this.birthYear = birthYear;
  this.occupation = occupation;
}

update.call(mike, [1999, "singer"]); 
console.log(mike);

update.call(tom, [2002, "teacher"]); 
console.log(tom);

-----------------------------------------------------------------------------------------------------

const minNum = Math.min(3, 10, 1, 6, 4);
const maxNum = Math.max(3, 10, 1, 6, 4);

console.log(minNum);
console.log(maxNum);

-----------------------------------------------------------------------------------------------------

const nums = [3, 10, 1, 6, 4];
const minNum = Math.min(nums);
const maxNum = Math.max(nums);

console.log(minNum); //NaN
console.log(maxNum); //NaN

-----------------------------------------------------------------------------------------------------

const nums = [3, 10, 1, 6, 4];
const minNum = Math.min(...nums);
const maxNum = Math.max(...nums);

console.log(minNum);
console.log(maxNum);

-----------------------------------------------------------------------------------------------------

const nums = [3, 10, 1, 6, 4];
const minNum = Math.min.apply(null, nums);
// = Math.min.apply(null, [3, 10, 1, 6, 4]);

//const maxNum = Math.max.apply(null, nums);
const maxNum = Math.max.call(null, ...nums);
// = Math.max.apply(null, [3, 10, 1, 6, 4]);

console.log(minNum);
console.log(maxNum);

****************************************************************************************************************
****************************************************************************************************************

3. bind : 함수의 this값을 영구히 바꿀 수 있습니다.

const mike = { 
  name : "Mike",
};

function update(birthYear, occupation) {
  this.birthYear = birthYear;
  this.occupation = occupation;
}

const updateMike = update.bind(mike);

updateMike(1980, "police");
console.log(mike);

-----------------------------------------------------------------------------------------------------

const user = { 
  name : "Mike",
  showName : function() {
    console.log(`hello, ${this.name}`);
  },
};

user.showName();

let fn = user.showName;

fn();

-----------------------------------------------------------------------------------------------------

const user = { 
  name : "Mike",
  showName : function() {
    console.log(`hello, ${this.name}`);
  },
};

user.showName();

let fn = user.showName;

fn.call(user);
fn.apply(user);

let boundFn = fn.bind(user);
boundFn();

-----------------------------------------------------------------------------------------------------

반응형

ES6에 추가된 스펙, Class

개발 및 관리/Javascript 2022. 3. 18. 22:28 posted by HighLighter
반응형


const User = function (name, age) {
  this.name = name;
  this.age = age;
  this.showName = function () {
    console.log(this.name);
  };
};

const mike = new User("Mike", 30);

class User2 {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }
  showName() {
    console.log(this.name);
  }
}

const tom = new User2("Tom", 19);

------------------------------------------------------------------------------------------

const User = function (name, age) {
  this.name = name;
  this.age = age;
  //this.showName = function () {
    //console.log(this.name);
  //};
};

User.prototype.showName = function() {
  console.log(this.name);
};

const mike = new User("Mike", 30);

class User2 {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }
  showName() {
    console.log(this.name);
  }
}

const tom = new User2("Tom", 19);

------------------------------------------------------------------------------------------

const User = function (name, age) {
  this.name = name;
  this.age = age;
  //this.showName = function () {
    //console.log(this.name);
  //};
};

User.prototype.showName = function() {
  console.log(this.name);
};

//const mike = new User("Mike", 30);
const mike =  User("Mike", 30);

class User2 {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }
  showName() {
    console.log(this.name);
  }
}

//const tom = new User2("Tom", 19);
const tom =  User2("Tom", 19);

------------------------------------------------------------------------------------------

const User = function (name, age) {
  this.name = name;
  this.age = age;
  //this.showName = function () {
    //console.log(this.name);
  //};
};

User.prototype.showName = function() {
  console.log(this.name);
};

const mike = new User("Mike", 30);

class User2 {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }
  showName() {
    console.log(this.name);
  }
}

const tom = new User2("Tom", 19);


for(const p in mike){
  console.log(p);
}

for(const p in tom){
  console.log(p);
}

//***********************************************************************************************************************

//***********************************************************************************************************************

Class : 상속

//extends

class Car {
  constructor(color) {
    this.color = color;
    this.wheels = 4;
  }
  drive() {
   console.log("drive..");
  }
  stop() {
    console.log("STOP!");
  }
}

class Bmw extends Car {
  park() {
    console.log("PARK");
  }
}

const z4 = new Bmw("blue");

-------------------------------------------------------------------

// Class : method overriding[1]

class Car {
  constructor(color) {
    this.color = color;
    this.wheels = 4;
  }
  drive() {
   console.log("drive..");
  }
  stop() {
    console.log("STOP!");
  }
}

class Bmw extends Car {
  park() {
    console.log("PARK");
  }
  stop() {
    console.log("OFF");
  }
}

const z4 = new Bmw("blue");

-------------------------------------------------------------------

// Class : method overriding[2]

class Car {
  constructor(color) {
    this.color = color;
    this.wheels = 4;
  }
  drive() {
   console.log("drive..");
  }
  stop() {
    console.log("STOP!");
  }
}

class Bmw extends Car {
  park() {
    console.log("PARK");
  }
  stop() {
    super.stop();
    console.log("OFF");
  }
}

const z4 = new Bmw("blue");

z4.stop();

-------------------------------------------------------------------

// Class : method overriding[3]

class Car {
  constructor(color) {
    this.color = color;
    this.wheels = 4;
  }
  drive() {
   console.log("drive..");
  }
  stop() {
    console.log("STOP!");
  }
}

class Bmw extends Car {
  constructor() {
    super();
    this.navigation = 1;
  }
  park() {
    console.log("PARK");
  }
}

const z4 = new Bmw("blue");

z4

-------------------------------------------------------------------

// Class : method overriding[3]

class Car {
  constructor(color) {
    this.color = color;
    this.wheels = 4;
  }
  drive() {
   console.log("drive..");
  }
  stop() {
    console.log("STOP!");
  }
}

class Bmw extends Car {
  constructor(color) {
    super(color);
    this.navigation = 1;
  }
  park() {
    console.log("PARK");
  }
}

const z4 = new Bmw("blue");

z4;

반응형

JavaScript 디버깅, Java 디버깅

개발 및 관리/Javascript 2022. 3. 17. 22:22 posted by HighLighter
반응형

JavaScript 디버깅 - DOM 객체, 함수 오류 검토

https://youtu.be/STivPZTyNmc

이클립스에서 자바 디버깅하기

https://youtu.be/6ONHEclZDYc

[추가 기능] 이클립스에서 디버깅하기

https://youtu.be/99s-NqbGbow

코딩의 시작과 끝, 디버깅 | 실력있는 개발자의 필수 무기

https://youtu.be/IwC-BVM2_YQ

반응형
반응형

요즘 자바스크립트를 공부하고 있습니다. 자바스크립트에서 자바와 유사한 예외처리가 있습니다

1. 자바스크립트 예외 처리 - throw

function sum1(x, y) {
 return x + y;
};

function sum2(x, y) {
  if( typeof x !== 'number' || typeof y !== 'number') {
throw '숫자가 아닙니다.'
  }
 return x + y;
}

console.log(sum1(1, 2));
console.log(sum1('a', 2));

console.log(sum1(1, 2));
console.log(sum1('a', 2));

2. 자바스크립트 예외 처리 - try catch, Error 객체

--------------------------------------------------------------------

--2-1. 
function f2() {
  console.log('f2 start');
  console.log('f2 end');
}

function f1() {
  console.log('f1 start');
  f2();
  console.log('f1 end');
}

console.log('will : f1');
f1();
console.log('did : f1');

--------------------------------------------------------------------

--2-2.
function f2() {
  console.log('f2 start');
  //throw '에러';
  console.log('f2 end');
}

function f1() {
  console.log('f1 start');
  f2();
  console.log('f1 end');
}

console.log('will : f1');
f1();
console.log('did : f1');

--------------------------------------------------------------------
--2-3.
function f2() {
  console.log('f2 start');
  throw '에러';
  console.log('f2 end');
}

function f1() {
  console.log('f1 start');
  try {
    f2();
  } catch (e) {
    console.log(e);
  }
  console.log('f1 end');
}

console.log('will : f1');
f1();
console.log('did : f1');

--------------------------------------------------------------------
--2-4.
function f2() {
  console.log('f2 start');
  throw new Error('에러');
  console.log('f2 end');
}

function f1() {
  console.log('f1 start');
  f2();
  console.log('f1 end');
}

console.log('will : f1');
try {
  f1();
} catch (e) {
  console.log(e);
}

console.log('did : f1');

--2-5.
--------------------------------------------------------------------

<!DOCTYPE html>
<head>
  <title>Error Handling Basics</title>
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta charset="utf=8">
  <style>
      .box {
          width: 150px;
          height: 150px;
          border: 1px solid #000;
      }
  </style>
</head>

<body>
    <h1>Error Handing Basics</h1>
    <ul >
        <li>recovering form unexpected situations (errors)</li>
    </ul>
    <hr class="hr">
    <div id="myBox"></div>

    <script>
        function changeBackgroundColor(element, color) {
            element.style.backgroundColor = color;
        }

        const myBox = document.getElementById("myBox");
         
        try {
            changeBackgroundColor(myBox, "blue");
        } catch (e) {
            // console.log(e);
            // console.dir(e);
            alert("something went wrong. sorry about that.")
        } finally {
            console.log(20);
        }

        prompt("What is your name?");
    </script>
</body>


--------------------------------------------------------------------

How to Handle Errors - Basics of Error Handling in JavaScript - Tutorial

https://youtu.be/G8Jux_bsIXU

--------------------------------------------------------------------
3. 자바스크립트 예외 처리 - promise의 catch함수

--3-1.

function wait(sec) {
  return new Promise((resolve, reject) => {
setTimeout(() => {
  reject('error!');
}, sec * 1000);
  });
}

try {
  wait(3);
} catch (e) {
  console.error(e);
}

--------------------------------------------------------------------
--3-2.
function wait(sec) {
  return new Promise((resolve, reject) => {
setTimeout(() => {
  reject('error!');
}, sec * 1000);
  });
}

wait(3).catch( e => {
  console.log(e);
});

--------------------------------------------------------------------
--3-3.
function wait(sec) {
  return new Promise((resolve, reject) => {
setTimeout(() => {
  reject('error!');
}, sec * 1000);
  });
}

wait(3).catch( e => {
  console.log('1st catch', e);
});

--------------------------------------------------------------------
--3-4.
function wait(sec) {
  return new Promise((resolve, reject) => {
setTimeout(() => {
  reject('error!');
}, sec * 1000);
  });
}

wait(3)
  .catch( e => {
  console.log('1st catch', e);
})
  .catch( e => {
  console.log('2nd catch', e);
});

--------------------------------------------------------------------
--3-5.
function wait(sec) {
  return new Promise((resolve, reject) => {
setTimeout(() => {
  reject('error!');
}, sec * 1000);
  });
}

wait(3)
  .catch( e => {
  console.log('1st catch', e);
  throw e;
})
  .catch( e => {
  console.log('2nd catch', e);
});

--------------------------------------------------------------------
--3-6.
function wait(sec) {
  return new Promise((resolve, reject) => {
setTimeout(() => {
  reject('error!');
}, sec * 1000);
  });
}

wait(3)
  .then( () => {
  console.log('done!!!');
  },
  e => {
    console.log('1nd catch in Then', e);
  }
 )
  .catch( e => {
  console.log('2nd catch', e);
});

반응형
반응형

*자바스크립트 엔진이란?

우리의 코드를 전달받는 JS엔지는 [console]을 찍거나 [화면]을 그리거나 [네트워크 통신]하는 기능이 내부에 없다.

alert함수는 브라우저에서 제공하는 JS엔진의 날개 API(= Application Programming Interface) JS엔진 자체에 alert함수가 있는 것이 아니다.

1. 자바스크립트 클로저? 간단히 핵심만 파악하기

https://youtu.be/MbYShFxp-j0

2. 자바스크립트 대표적 클로저 실수를 let으로 해결?

https://youtu.be/RZ3gXcI1MZY

3. 코좀봐코 - 화살표 함수에서 간단히 객체 리턴할 때 왜 괄호()가 필요한 거죠?

https://youtu.be/sTMeRamEwwk

4. 자바스크립트 예외처리 1/4 - 예외란 무엇인가? throw?

https://youtu.be/EBmIHrLTVdg

5. 자바스크립트 예외처리 2/4 - try catch, Error 객체

https://youtu.be/wf6AlMj7TFA

6. 자바스크립트 예외처리 3/4 - promise의 catch함수

https://youtu.be/RRc_iVHdDKk

7. 자바스크립트 예외처리 4/4 - async/await의 예외

https://youtu.be/kngOWhzPHzg

8. 자바스크립트 promise? 나도 써보자, 기본 개념부터~

https://youtu.be/CA5EDD4Hjz4?list=PLuBMRNcyzsWxcnDdAmJWyWYXuExyP9aS1

9. ES6 화살표 함수에 없는 3가지?

https://youtu.be/4zjKltnIBug?list=PLuBMRNcyzsWxcnDdAmJWyWYXuExyP9aS1

10. 자바스크립트 개념잡기: 콜백 함수의 동기적 실행과 비동기적 실행

https://youtu.be/j0Viy3v97gY?list=PLuBMRNcyzsWxcnDdAmJWyWYXuExyP9aS1

11. 자바스크립트 타이머는 지각쟁이? 그 이유는 싱글 콜 스택?

https://youtu.be/iNH4UQxZexs?list=PLuBMRNcyzsWxcnDdAmJWyWYXuExyP9aS1

12. 자바스크립트 this? 간단히 핵심만 파악하기

https://youtu.be/PAr92molMHU?list=PLuBMRNcyzsWxcnDdAmJWyWYXuExyP9aS1 

---------------------------------------------------------------------------------------------------

var:  함수 scope
let:  중괄호 scope
scope: 변수의 값을 볼 때 참조하는 곳

*******************
main.js
*******************

var btns = [
  documents.getElementById('btn0'),
  documents.getElementById('btn1'),
  documents.getElementById('btn2')
];

function setClick() {
  for (var i = 0 ; i < 3; i++) {
    btns[i].onclick = function() {
console.log(i);
    }
  }
}

setClick();

-----------------------------------------------------------------

var btns = [
  documents.getElementById('btn0'),
  documents.getElementById('btn1'),
  documents.getElementById('btn2')
];

function setClick() {
  for (let i = 0 ; i < 3; i++) {
    btns[i].onclick = function() {
console.log(i);
    }
  }
}

setClick();

반응형
반응형
반응형
반응형

자바스트립트 기초 강의 - [프론트엔드 개발자 첫걸음] - 3시간 완성​

https://youtu.be/adioo1lv8fs

반응형

자바스크립트 메모리 누수

개발 및 관리/Javascript 2022. 2. 26. 10:05 posted by HighLighter
반응형

당신이 모르는 자바스크립트의 메모리 누수의 비밀

https://ui.toast.com/weekly-pick/ko_20210611

자바스크립트 메모리 누수와 해결 방법

https://yceffort.kr/2020/07/memory-leaks-in-javascript

자바스크립트의 메모리관리

https://developer.mozilla.org/ko/docs/Web/JavaScript/Memory_Management

[Javascript] 자바스크립트에서 메모리 누수의 4가지 형태

https://kellis.tistory.com/140

자바스크립트는 어떻게 작동하는가: 메모리 관리 + 4가지 흔한 메모리 누수 대처법

https://engineering.huiseoul.com/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%8A%94-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%9E%91%EB%8F%99%ED%95%98%EB%8A%94%EA%B0%80-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EA%B4%80%EB%A6%AC-4%EA%B0%80%EC%A7%80-%ED%9D%94%ED%95%9C-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EB%88%84%EC%88%98-%EB%8C%80%EC%B2%98%EB%B2%95-5b0d217d788d

자바스크립트 메모리 누수 방지 기법

https://merrily-code.tistory.com/204

반응형
반응형

자바스크립트 배우기전 꼭 봐야할 영상 | 자바스크립트의 역사와 현재 그리고 미래 (JavaScript, ECMAScript, JQuery, Babel, Node.js)

https://youtu.be/wcsVjmHrUQg?list=PLv2d7VI9OotTVOL4QmPfvJWPJvkmv6h-2 

자바스크립트 2. 콘솔에 출력, script async 와 defer의 차이점 및 앞으로 자바스크립트 공부 방향 | 프론트엔드 개발자 입문편 (JavaScript ES5+)

https://youtu.be/tJieVCgGzhs?list=PLv2d7VI9OotTVOL4QmPfvJWPJvkmv6h-2

자바스크립트 3. 데이터타입, data types, let vs var, hoisting | 프론트엔드 개발자 입문편 (JavaScript ES5+)

https://youtu.be/OCCpGh4ujb8?list=PLv2d7VI9OotTVOL4QmPfvJWPJvkmv6h-2 

 

반응형

실용 자바스크립트 강좌

개발 및 관리/Javascript 2022. 2. 23. 22:50 posted by HighLighter
반응형

진짜 웹개발로 배우는 실용 자바스크립트 1강 : 셀렉터 selector

https://youtu.be/8rv8GTgYYrU?list=PLfLgtT94nNq0svPBSslzReYKbZRuv_-NK

실용 자바스크립트 2강 : Alert 만들어서 유저 위협하기

https://youtu.be/lElVKHCsYSM?list=PLfLgtT94nNq0svPBSslzReYKbZRuv_-NK

실용 자바스크립트 3강 : function 언제 쓰는지 아셈? + 간단한 버그찾는법

https://youtu.be/zpxf22Mp2KE?list=PLfLgtT94nNq0svPBSslzReYKbZRuv_-NK

실용 자바스크립트 4강 : 파라미터 왜 쓰는지 알려줌 (쓸데없음)

https://youtu.be/jvtuRD48_C0?list=PLfLgtT94nNq0svPBSslzReYKbZRuv_-NK

실용 자바스크립트 5강 : 이벤트리스너쓰면 드러웠던 HTML이 말끔

https://youtu.be/EMBWL336o20?list=PLfLgtT94nNq0svPBSslzReYKbZRuv_-NK

실용 자바스크립트 6강 : 리액트포기자를 위한 jQuery 빠른기초

https://youtu.be/047bll8o9To?list=PLfLgtT94nNq0svPBSslzReYKbZRuv_-NK 

 

반응형