var pizza = true;
pizza = false;
console.log(pizza); //false
var topic = '자바스크립트';
if(topic) {
var topic = '리액트';
console.log('블록', topic); // 블록 리액트
}
console.log('글로벌', topic); // 글로벌 리액트
var topic = '자바스크립트';
if(topic) {
let topic = '리액트';
console.log('블록', topic); // 블록 리액트
}
console.log('글로벌', topic); // 글로벌 자바스크립트
var div,
container = document.getElementById('container');
for (var= i=0; i < 5; i++) {
div= document.createElement('div');
div.onclick = function() {
alert('이것은 박스 #' + i +'입니다.');
}
container.appendChild(div);
}
const container = document.getElementById('container');
let div;
for(let i =0; i '< 5; i++) {
div = document.getElementById('div');
div.onclick = function() {
alert('이것은 박스 #: 'i +i + '입니다.');
};
container.appendChild(div);
}
console.log(lastName + ", " + firstName + "" + middleName);
console.log(`${lastName}, ${firstName} ${middleName}`);
const email = `
${firstName} 님께
${event} 티켓 ${qty} 건을 구매해 주셔서 감사합니다.
주문 상세 정보:
${lastName} ${firstName} ${middleName}
${qty} * $${price} = $${qty * price} 공연: ${event}
공연 시작 30분 전까지 배부처에서 티켓을 수령하시 바랍니다.
감사합니다.
${ticketAgent} 드림
`
document.body.innerHTML = `
<section>
<header>
<h1>The HTML5 Blog</h1>
</header>
<article>
<h2>${article.title}</h2>
${article.body}
</article>
<footer>
<p>copyright ${new Date().getYear() | The HTML% Blog}</p>
</footer>
</section>
`;
function logCompliment() {
console.log("할수있다!");
}
선언한 함수 호출해 실행하기
function logCompliment() {
console.log('할수있다');
}
logComliment();
함수 표현식
const logName = funciton () {
console.log('할수있다!');
};
logName();
// 선언하기 전에 함수를 호출한다.
hey();
// 함수 선언
function hey() {
alert("hey")
}
// 선언하기 전에 함수를 호출한다.
hey();
// 함수 표현식
const hey = function() {
alert("hey!")
};
// Error: hey is not a function
const logName = function(firtsName) {
console.log(`할수있다, ${firstName}` );
};
logName("Nana");
const logName = funtion (firstName, message) {
console.log(`${firstName}: ${message}
};
logName("Nana", "넌할수있다");
const createName = function(firstName, message) {
return `${firstName}: ${message}`;
};
createName("Nana", "넌할수있다");
console.log(createName("Nana", "넌할수있다"));
function logActivity(name: "nana", activity="basketball") {
console.log(`${name}은 ${activity}를 좋아한다.`);
}
const defaultPerson = {
name: {
first: "nana",
last: "lee"
},
favActivity: "basketball"
};
function logActivity(p=defaultPerson) {
console.log(`${p.name.first}은 ${p.favActivity}를 좋아한다.`);
}
const lordify = function (firstName) {
return `컨터베리의 ${firstName}`;
}
console.log(lordify("nana")); // 컨터베리의 nana
console.log(lordify("nana)); // 컨터베리의 nana
const lordify = firstName => `컨터베리의 ${firstName}`;
// 전형저적인 방식
var lordify = function (firstName, land) {
return `${land}의 ${firstName}`;
};
// 화살표 함수
var lordify = (firtsName, land) => `${land}의 ${firstName}`;
console.log(lordify("nana", "seoul")); // 서울의 nana
console.log(lordify("nana", "Switzerland")) // 스위스의 nana
const lordify = (firstName, land) => {
if(!firstName) {
throw new Error ('lordify에게 이름을 넘겨야 한다.');
}
if(!land) {
throw new Error('나에게는 내 자신이 있다');
}
return `${land}의 ${firstName}`;
}
console.log(lordify("sena", "New Zealand")); // 뉴질랜드의 세나
console.log(lordify("Hazel")); // ! 자바스크립트 오류
=> if/else 문을 중괄호로 둘러싸야만 했지만, 여전히 화살표 함수가 더 짧다
Q. 객체를 반환하고 싶으면 어떻게 해야할까?
const person = (firstName, lastName) => {
first: firstName,
last: lastName
};
console.log(person("nana", "lee"));
// Error: Uncaught SyntaxError: Unexpected token:"
const person = (firstName, lastName) => ({
first: firstName,
last: lastName
});
console.log(person("nana", "lee"));
const gangwon = {
resorts: ["용평", "평창", "강촌", "강릉", "홍천"],
print: fuction(delay=1000) {
setTimeout(function(){
console.log(this.resorts.join(","));
}, delay);
}
};
gangwon.print(); // Cannot read property 'join' of undefined 라는 오류 발생
이 오류는 this.resorts의 join 메서드를 호출하려고 시도했기 때문에 발생했다.
this 를 콘솔에 찍으면 this가 window 객체임을 알 수 있다
전역객체(global object)
-어떤 실행 컨텍스트(Execution Context)에도 속하지 않은 최상위 객체를 말합니다. 브라우저에서는 전역 객체를 window라고 부르고, Node.js 환경에서는 전역 객체를 global이라고 부릅니다.
- 전역 객체에는 자바스크립트의 기본 내장 객체와 함수, 그리고 사용자 정의 전역 변수 등이 포함됩니다. 예를 들어, Object, Array, setTimeout, console 등의 객체나 함수들은 전역 객체의 프로퍼티로 포함되어 있습니다. 따라서 어떤 스코프에서든 이러한 객체나 함수들을 호출할 수 있습니다.
- 하지만 전역 변수와 함수는 코드의 가독성과 유지보수성을 떨어뜨리므로, 전역 객체를 가능한 한 사용하지 않는 것이 좋습니다.
console.log(this); // Window()
var gangwon = {
resorts: ["용평", "평창", "강촌", "강릉", "홍천"],
print: function(delay=1000) {
setTimeout(() => {
console.log(this.resorts.join(","));
}, delay);
}
};
gangwon.print(); // 용평, 평창, 강촌 강릉, 홍천
var gangwon = {
resorts: ["용평", "평창", "강촌", "강릉", "홍천"],
print: (delay=1000) => {
setTimeout(() => {
console.log(this.resorts.join(","));
}, delay);
}
};
gangwon.print(); // Cannot read property 'join' of undefined 라는 오류 발생
컴파일링
gksek.const add = (x=5, y=10) => console.log(x+y);
이 코드를 바벨로 변환하면
'use stric'
var add = function add() {
var x = arguments.length <= 0 || arguments[0] === undefined ? 5 : arguments[0];
var y = arguments.length <= 1 || arguments[1] === undefined ? 10 : arguments[1];
return console.log(x+y)
};
const sandwich = {
bread: "더치 크런치",
meat: "참치",
cheese: "스위스",
toppings: ["상추", "토마토", "머스타드"]
};
const {bread, meat} = sandwich;
console.log(bread, meat); // 더치 크런치 참치
const sandwich = {
bread: "더치 크런치",
meat: "참치",
cheese: "스위스",
toppings: ["상추", "토마토", "머스타드"]
};
const {bread, meat} = sandwich;
bread = "마늘";
meat = "칠면조";
console.log(bread); // 마늘
console.log(meat); // 칠면조
console.log(sandwich.bread, sandwich.meat); // 더치 크런치 참치
const lordify = reqularPerson => {
console.log(`컨터베리의 ${reqularPerson.firstname}`);
};
var reqularPerson = {
firstname: "nana",
lattname: "lee"
};
lordify(reqularPerson); // 컨터베리의 nana
const lordify = ({firstname}) => {
console.log(`컨터베리의 ${firstname}`)
};
const reqularPerson = {
firstname: "naan",
lastname: "lee"
};
lordify(reqularPerson); // 컨터베리의 nana
const reqularPerson = {
firstname: "naan",
lastname: "lee",
spouse: {
firstname: "sena",
lastname: "lee",
}
};
예명도 컨터베리의 영주로 만들고 함수에 있는 구조 분해 인수를 조정하기
const lordify = ({spouse: {firstname}}) => {
console.log(`컨터베리의 ${firstname}`);
};
lordify(reqularPerson); // 컨터베리의 sena
const [firstAnimal] = ["토끼", "거북이" "코끼리"];
console.log(firstAnimal); // 토끼
const [,,thirdAnimal] = ["토끼", "거북이" "코끼리"];
console.log(thirdAnimal); // 토끼
const name = "탈락"; // 캘리포니아에 있는 산
const elevation = "9788"; // 고도(단위: 피트)
const funHike = {name, elevation};
console.log(funHike); // {name: "탈락", elevation: 9788}
객체 매서드
륾 만드는 것도 가능하다.const name = "탈락"; // 캘리포니아에 있는 산
const elevation = "9788";
const print = function() {
console.log(${this.name}산의 높이는 ${this.elevation}피트입니다.)
};
const funHike = {name, elevation, print}
funHike.prinf(); //탈락 산의 높이는 9788 입니다.
this
사용했다// 옛날 방식
var skier = {
name: name,
sound: sound,
powderYell: function() {
var yell = this.sound.toUpperCase();
console.log(`${yell} ${yell} ${yell}!!!`)
},
speed: function(mph){
this.speed = mph;
console.log('속력(mph):', mph)
}
}
// 새로운 방식
const skier = {
name,
sound,
powderYell() {
let yell = this.sound.toUpperCase();
console.log(`${hell}${hell`${hell}!!!`)
},
speed(mph){
this.speed = mph;
console.log('속력(mph):', mph)
}
}
const peaks = ["대청봉", "중청봉", "소청봉"];
const canyons = ["천불동계곡","가아동계곡"];
const seoraksan = ["...peaks, ...canyons"]
console.log(seoraksan.join(', ')); // 대청봉, 중청봉, 소청봉, 천불동계곡, 가야동 계곡
const peaks = ["대청봉", "중청봉", "소청봉"];
const [last] = peaks.reverse();
console.log(last); //소청봉
console.log(seoraksan.join(', ')); //소청봉, 중청봉, 대청봉
Q. 문제점을 알 수 있는가?
const peaks = ["대청봉", "중청봉", "소청봉"];
const [last] = [...peaks].reverse();
console.log(last); // 소청봉
console.log(peaks.join('. ')); // 대청봉, 중청봉, 소청봉
const lakes = ["경포호", "화진포", "송지호", "청조호"]
const [first, ...rest] = lakes;
console.log(first) ; // 경포호
console.log(res.joim(', ')); // 화진포,송지호, 청초호
레스트 파라미터
라고 부른다function directions(...args) {
let [start, ...remaining] = args;
let [finish, ...stops] = reamining.rerverse();
console.log(`${args.length}도시를 운행합니다.`)
console.log(`${start}에서 출발합니다.`)
console.log(`목적지는${finish}입니다.`)
console.log(`중간에 ${stops.length}군데를 들립니다.`);
}
directions(
"서울",
"수원",
"천안",
"대전",
"대구",
"부산"
);
const morning = {
breakfast: "미역국",
lunch: "삼치구이와 보리밥"
};
const dinner = "스테이크 정식";
const backpackingMeals ={
...moring,
dinner
};
console.log(backpackingMeals);
// {breakfast: "미역국", lunch:"삼치구이와 보리밥", dinner:"스테이크 정식"}
const header = documnet.getElementById("heading");
header.innerHTML = "Hey!"
console.log(fetch("https://api.randomuser.me/?nat=US&results=1"));
pending
)인 프라미스(promise
) 를 볼 수 있다.JSOM으로 바꾸기
fetch("https://api.randomuser.me/?nat=US&result=1").then(res => console.log(res.json))
);
fetch("https://api.randomuser.me/?nat=US&result=1")
.then(res=> res.json())
.then(json => json.results)
.then(console.log)
.catch(console.error);
const getFakePerson = async () => {
let res = await fetch('https://api.reandomuser.me/?nat=US&results=1');
let { results } = res.json();
console.log(results);
};
getFakePerson();
const getFakePerson = async () => {
try {
let res= await fetch('https://api.randomuser.me/?nat=US&results=1');
let { results } = res.json();
console.log(results);
} catch (error) {
console.error(error);
}
};
getFakePerson();
const getPeople = count =>
new Promise((resolves, rejects) => {
const api = `htpps://api.randomuser.me/?nat=US&results=${count}`;
const request = new XMLGttpReques();
request.open("GET", api);
reqeust.onload = () =>
request.status === 200
? resolves(JSON.parse(request.response),.results) : reject(Error(request.statusText));
request.onerror = err => rejects(err);
request.send();
});
getPeople(5)
.then(members => console.log(members))
.then(error => console.log(`getPeople failed: ${error.message}`));
function Vacation(destination, length) {
this.destination = destination;
this.lengh = length;
}
Vacation.prototype.print = function() {
console.log(this.destination + "은(는) " + this.length + " 일 걸립니다.");
};
const maui = new Vacation("마우이", 7);
maui.print(); // 마우이은(는) 7일 걸립니다.
class Vacation {
constructor(destination, length) {
this.destination = destination;
this.lengh = length;
}
print () {
console.log(`${this.destination}은(는) ${this.length}일 걸립니다.");
}
}
class Expedition extends Vaction {
construcor (destination, length, gear) {
super(destination, length);
this.gear = gear;
}
print() {
super.print();
console.log(`당신의 ${this.gear.join("와(과) 당신의 ")}를(을) 가져오십시오`)
}
}
const trip2 = new Expedition("한라산", 3, ["선글라스, "오색깃발", "카메라"]);
trip2.print();
// 한라산은(는) 3일 걸립니다.
// 당신의 선글라스와 (과) 당신의 오색 깃발과 당신의 카메라를 가져오십시오.
text-helper.js 파일에 있는 다음 모듈은 두 함수를 외부에 노출시킨다.
export const print(message) => log(message, new Date());
export const log(message, timestamp) =>
console.log(`${timestamp.toString()}: ${message}`)
const freel = new Expedition("프릴 산", 2, ["식수", "간식"]);
export default freel;
import {print, log} from './text-helpers';
import freel from './mt-freel';
print( '메시지를 print' );
log('메시지를 log')
freel.print();
모듈에서 가져온 대상에 다른 이름을 부여할 수도 있다.
import { print as p, log as } from './text-helpers';
p('메시지를 print');
l('메시지를 log');
import * as fns from './text-helpers';
const print(message) => log(message, new Date());
const log(message, timestamp) =>
console.log(`${timestamp.toString()}: ${message}`);
module.exports = {print, log};
const { log, print } = require('./text-heplers')
[Reference]
1. Learning React(Alex Banks/Eve Porcello/오현석/한빛미디어_2021)