Scope : 변수 접근 규칙에 따른 유효 범위
- Local socpe vs. Global scope
_let greeting = 'Hello';
function greetSomeone () {
let firstName = 'Josh';
return greeting + ' ' + firstName;
}_
// function부터 return 까지 Local scope
greetSomeone(); // 'Hello Josh'
firstName; // ReferenceError
_// 처음부터 끝까지 Global scope
let name = "Richard";
function showName () {
name = "Jack"; // 전역 변수
// 선언 (let)이 없기 때문에, 바깥 scope에 있는 name이라는 변수를 가져온다
console.log(name); // Jack
}
console.log(name); // Richard
showName();
console.log(name); // Jack
Function Scope vs. Block Scope
let 키워드 : 유효범위 Block Scope, 값 재정의 가능, 재선언 불가능
const 키워드 : 유효범위 Block Scope, 값 재정의 불가능, 재선언 불가능
var 키워드 : 유효범위 Function Scope, 값 재정의 가능, 재선언 가능
전역 변수와 window 객체
var myName = "Paul";
console.log(window.myName); // Paul
function foo() {
console.log('bar');
}
console.log(foo === window.foo); // true
선언 없이 초기화된 전역 변수
function showAge() {
age = 90;
console.log(age);
}
showAge(); // 90
console.log(age); // 90
HOISTING
**LEXICAL SCOPE VS. DYNAMIC SCOPE
매개변수 (Parameters)
Math.max ([값1[, 값2[, ...]])
function getMaxNum(...nums) {
return nums.reduce(function(acc, current) {
if(acc > current) {
return acc;
} else {
return current'
}
});
}
getMaxNum (3,5,8,10); // 10
function getMaxNum() {
console.log(arguemtns); // {0:3, 1:5, 2:8, 3:10} 이 arguments 객체는 유사배열. 배열이 아님
getMaxNum(3,5,8,10);
// arguments[0]; -> 3
// arguments[1]; -> 5
// arguments[2]; ->8
// arguments.forEach -> undefined
function getRoute(destination, departure = 'ICN') {
return '출발지: ' + departure + ',' + '도착지: ' + destination;
}
getRoute('PEK'); // '출발지: ICN, 도착지: PEK'