SlideShare a Scribd company logo
1 of 13
발표자 : zero86
Javascript study
문법, 변수, 스코프
INDEX
01
Javascript 문법
02
Javascript 변수
03
Javascript 스코프
Javascript 문법 및 정의
정의
- 프로그래밍 언어 / 인터프리터 언어(별도의 컴파일 과정을 거치지 않고 즉시 실행)
- Prototype 기반 언어
- 객체지향언어이자 1급 함수를 취급하는 언어
- 정적인 HTML 문서를 동적인 상태로 조작가능(DOM : Document Object Model)하도록 해주는 요소
문법
- 인라인 작성(inline)
01 - Javascript 문법
<ul>
<li onClick='alert("월월")'>강아지</li>
<li>개돼지</li>
<li onClick='alert("멍멍")'>월요일만 짓는개</li>
</ul>
Javascript 문법 및 정의
문법
- 인터널 작성(internal)
01 - Javascript 문법
<html>
<head>
</head>
<body>
<div id="dog">
div dog
</div>
</body>
</html>
<script>
var dogElement = document.getElementById('dog');
dogElement.addEventListener('click', function() {
alert('인터널 멍멍!');
});
</script>
- 익스터널 작성(external)
script 태그 src 속성에 *.js 파일을 지정
<html>
<head>
</head>
<body>
<div id="dog">
external dog
</div>
</body>
</html>
<script src='app.js'>
</script>
Javascript 문법 및 정의
문법
01 - Javascript 문법
<html>
<head>
</head>
<body>
<div id="dog">
div dog1
</div>
</body>
</html>
<script>
// window 객체에 이벤트 등록(이벤트명, 이벤트 완료 시 실행할 함수 작성)
window.addEventListener('DOMContentLoaded', function(){
alert('DOMContentLoaded..'); // 알림창 출력
});
// window 객체에 이벤트 등록
window.addEventListener('load', function() {
alert('All assets are loaded..'); // 알림창 출력
});
/* window.onload = function() {
alert('body onload..');
};
document.body.onload = function() {
alert('body onload..');
} */
</script>
Javascript 변수
변수정의
var 키워드 사용
예) var a;
변수할당
var a = 10; // 10이라는 값을 a변수에 할당
변수사용
var a = 'Hello World';
console.log(a); // 콘솔에 a 변수 내용 출력
02 - Javascript 변수
Javascript 변수
자바스크립트는 느슨한타입, 동적타입 특징을
가지고 있다. 그말은 변수의 타입을 미리 선언할
필요가 없다는 뜻이다.
원시타입(Primitive Type)
boolean / number / string / null / undefined
참조타입(Reference Type)
object : 함수, 배열, 일반 객체
null 같은 경우, typeof 연산자를 보면 object라
고 출력이 되지만, 원시타입이며 설계오류이다.
02 - Javascript 변수
변수타입(자료형)
var a = 1;
var aa = 1.54;
var b = 'Hello World';
var c = [];
var cc = new Array();
var d = {};
var e = function() { };
var f = null;
var g = undefined;
var h;
var i = true;
console.log(typeof a); // number
console.log(typeof aa); // number
console.log(typeof b); // string
console.log(typeof c); // object
console.log(typeof cc); // object
console.log(typeof d); // object
console.log(typeof e); // functoin
console.log(typeof f); // object
console.log(typeof g); // undefined
console.log(typeof h); // undefined
console.log(typeof i); // boolean
Javascript 변수
call By Value
- 원시타입인 경우, 콜바이벨류로 동작
- 해당값을 복사하며, 전혀 다른 주소다
* 원시타입은 값을 변수에 그대로 할당
call By Reference
- 원시타입이 아닌 경우, 콜바이레퍼런스로 동작
- 값을 복사하나, 변수에 할당된 주소값을 복사
* 레퍼런스 타입은 원본값을 참조하기 위해, 변
수에 주소값을 할당
02 - Javascript 변수
function callByValue(num) {
num++;
console.log(num); // 101
console.log(numA); // 100
}
function callByReference(obj) {
obj.num++;
console.log(obj.num); // 101
console.log(objA.num); // 101
console.log(this.obj);
}
var numA = 100;
var objA = {
num : 100
};
var obj = {
num : 200
};
console.log(window.obj);
callByValue(numA); // numA 인자를 넘겨준다.
callByReference(objA); // objA 인자를 넘겨준다.
Javascript 변수
복사 = 연산자를 이용해서 변수의 내용을 복사
pass by value 이기 때문에, 복사한다고 볼 수 있
다.
예) var a = 10;
var b = a; // b변수에는 a변수에 있는 값이 할당된다.
깊은복사(Deep copy)
값을 완전히 복사한다. 독립적이다.
얕은복사(Shallow copy)
참조값을 복사한다. 참조값이 복사되었기 때문에,
독립적이지 않다.
그렇다면, 참조타입에 대한 깊은복사를 하려면?
1. 새로운 배열 / 객체를 생성하여 담는다.
2. 재귀형식의 사용자 정의 함수 작성
3. JSON.stringify() / JSON.parse() 메서드 이용
02 - Javascript 변수
var a = 10;
var aCopy = a;
aCopy = 100;
console.log(a);
console.log(aCopy);
var b = {num : 10};
var bCopy = b;
bCopy.num = 100;
console.log(b)
console.log(bCopy)
Javascript 변수
값 변환
변수에 담긴 어떤 값을 다른 타입의 값으로 바꾸
는 과정.
명시적이면, 타입 캐스팅
암시적이면, 강제변환 이라고 한다.
예)
var a = 7;
var b = a + ''; // 암시적 강제변환
var c = String(a);
//명시적 강제변환 함수 new 키워드가 붙지 않
기 때문에, 객체를 생성하는 것이 아니다.
String()
Number()
Boolean()
02 - Javascript 변수
False 한 값
JS에서는 일부값을 boolean 으로 강제변환했을
때, false가 되는 값들이 존재한다.
- undefined
- null
- false
- +0 / -0 / NaN
- '' (빈문자열)
위 값들을 boolean 으로 강제변환하면 false다.
Javascript 스코프
정의
- 접근할 수 있는 영역
- 유효범위를 의미(유효범위는 어느범위까지 참조하는지 접근성을 의미)
종류
- global scope or 전역 스코프
- 함수 레벨 스코프
- ES6 부터는 블록레벨스코프를 지원한다.
03 - Javascript 스코프
var hello = 'Hello CSS-Tricks Reader!' // 전역변수
function sayHello () {
console.log(hello)
}
console.log(hello) // 'Hello CSS-Tricks Reader!'
sayHello() // 'Hello CSS-Tricks Reader!'
function sayHello () {
var hello = 'Hello CSS-Tricks Reader!' // 함수레벨스코프
if(true) {
var test = 'test IF';
}
console.log(hello)
console.log(test); // test IF
}
sayHello() // 'Hello CSS-Tricks Reader!'
console.log(hello) // Error, hello is not defined
Javascript 스코프
렉시컬 스코프
- 정적스코프라고도 불리운다.
- 대부분의 언어들은 렉시컬 스코프를 따른다.
- 스코프가 정의가 되어있는 해당 문맥(context)에서 결정이 된다.
- 내부에서 외부로 검색하여 올라간다(scope chain) / 외부에서 내부로 검색 또는 참조할수 없다.
- 스코프에서 검색이 되어 감지가되면, 더이상 검색을하지 않는다.
03 - Javascript 스코프
function outerFunction () {
var outer = 'outer function!'
function innerFunction() {
var inner = 'inner function!'
console.log(outer) // outer function!
}
console.log(inner) // Error, inner is not defined
}
Javascript 스코프
정리
- 스코프는 어디서 어떻게 변수를 찾는가를 결정
(영역이 어디까지일까?)
foo 스코프에서 a / b 변수를 탐색한다.
b 를 찾지못해, 글로벌 스코프까지 탐색영역을 확대한다.
앗 b를 찾았네!! 가져다 쓰자.
현재 스코프에서 변수를 찾기 시작하고, 찾지 못하면 상위 스코프로 한 단계씩 올라간다.
최상위 스코프에 도달하면 변수를 찾았든, 못찾았든 탐색을 중단.
2 + 2 = 4
03 - Javascript 스코프
function foo(a) {
console.log(a+b);
}
var b = 2;
foo(2); // 4

More Related Content

What's hot

Javascript 함수(function) 개념, 호출패턴, this, prototype, scope
Javascript 함수(function) 개념, 호출패턴, this, prototype, scopeJavascript 함수(function) 개념, 호출패턴, this, prototype, scope
Javascript 함수(function) 개념, 호출패턴, this, prototype, scopeYoung-Beom Rhee
 
Javascript 교육자료 pdf
Javascript 교육자료 pdfJavascript 교육자료 pdf
Javascript 교육자료 pdfHyosang Hong
 
자바스크립트 기초문법~함수기초
자바스크립트 기초문법~함수기초자바스크립트 기초문법~함수기초
자바스크립트 기초문법~함수기초진수 정
 
Hacosa js study 2주차
Hacosa js study 2주차Hacosa js study 2주차
Hacosa js study 2주차Seong Bong Ji
 
Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리ETRIBE_STG
 
More effective c++ 항목30부터
More effective c++ 항목30부터More effective c++ 항목30부터
More effective c++ 항목30부터Dong Chan Shin
 
[JS] Function.prototype.bind
[JS] Function.prototype.bind[JS] Function.prototype.bind
[JS] Function.prototype.bindJinhyuck Kim
 
Effective c++ 4
Effective c++ 4Effective c++ 4
Effective c++ 4현찬 양
 
C 언어 스터디 02 - 제어문, 반복문, 함수
C 언어 스터디 02 - 제어문, 반복문, 함수C 언어 스터디 02 - 제어문, 반복문, 함수
C 언어 스터디 02 - 제어문, 반복문, 함수Yu Yongwoo
 
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitiveNAVER D2
 
Effective c++ chapter3, 4 요약본
Effective c++ chapter3, 4 요약본Effective c++ chapter3, 4 요약본
Effective c++ chapter3, 4 요약본Dong Chan Shin
 
Javascript introduction, dynamic data type, operator
Javascript introduction, dynamic data type, operatorJavascript introduction, dynamic data type, operator
Javascript introduction, dynamic data type, operatorYoung-Beom Rhee
 
More effective c++ 2
More effective c++ 2More effective c++ 2
More effective c++ 2현찬 양
 
스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍
스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍
스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍Young-Beom Rhee
 
프론트엔드스터디 E05 js closure oop
프론트엔드스터디 E05 js closure oop프론트엔드스터디 E05 js closure oop
프론트엔드스터디 E05 js closure oopYoung-Beom Rhee
 
0.javascript기본(~3일차내)
0.javascript기본(~3일차내)0.javascript기본(~3일차내)
0.javascript기본(~3일차내)Sung-hoon Ma
 
[Swift] Closure
[Swift] Closure[Swift] Closure
[Swift] ClosureBill Kim
 

What's hot (20)

Javascript 함수(function) 개념, 호출패턴, this, prototype, scope
Javascript 함수(function) 개념, 호출패턴, this, prototype, scopeJavascript 함수(function) 개념, 호출패턴, this, prototype, scope
Javascript 함수(function) 개념, 호출패턴, this, prototype, scope
 
Javascript 교육자료 pdf
Javascript 교육자료 pdfJavascript 교육자료 pdf
Javascript 교육자료 pdf
 
자바스크립트 기초문법~함수기초
자바스크립트 기초문법~함수기초자바스크립트 기초문법~함수기초
자바스크립트 기초문법~함수기초
 
Hacosa js study 2주차
Hacosa js study 2주차Hacosa js study 2주차
Hacosa js study 2주차
 
5 6 1
5 6 15 6 1
5 6 1
 
Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리
 
More effective c++ 항목30부터
More effective c++ 항목30부터More effective c++ 항목30부터
More effective c++ 항목30부터
 
[JS] Function.prototype.bind
[JS] Function.prototype.bind[JS] Function.prototype.bind
[JS] Function.prototype.bind
 
Effective c++ 4
Effective c++ 4Effective c++ 4
Effective c++ 4
 
C 언어 스터디 02 - 제어문, 반복문, 함수
C 언어 스터디 02 - 제어문, 반복문, 함수C 언어 스터디 02 - 제어문, 반복문, 함수
C 언어 스터디 02 - 제어문, 반복문, 함수
 
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
 
Effective c++ chapter3, 4 요약본
Effective c++ chapter3, 4 요약본Effective c++ chapter3, 4 요약본
Effective c++ chapter3, 4 요약본
 
Javascript introduction, dynamic data type, operator
Javascript introduction, dynamic data type, operatorJavascript introduction, dynamic data type, operator
Javascript introduction, dynamic data type, operator
 
More effective c++ 2
More effective c++ 2More effective c++ 2
More effective c++ 2
 
스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍
스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍
스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍
 
프론트엔드스터디 E05 js closure oop
프론트엔드스터디 E05 js closure oop프론트엔드스터디 E05 js closure oop
프론트엔드스터디 E05 js closure oop
 
0.javascript기본(~3일차내)
0.javascript기본(~3일차내)0.javascript기본(~3일차내)
0.javascript기본(~3일차내)
 
ES6 for Node.js Study
ES6 for Node.js StudyES6 for Node.js Study
ES6 for Node.js Study
 
ES6 for Node.js Study 2주차
ES6 for Node.js Study 2주차ES6 for Node.js Study 2주차
ES6 for Node.js Study 2주차
 
[Swift] Closure
[Swift] Closure[Swift] Closure
[Swift] Closure
 

Similar to javascript01

비전공자의 자바스크립트 도전기
비전공자의 자바스크립트 도전기비전공자의 자바스크립트 도전기
비전공자의 자바스크립트 도전기jeong seok yang
 
자바스크립트.
자바스크립트.자바스크립트.
자바스크립트.Deoc Jin
 
[하코사 세미나] 비전공자의 자바스크립트 도전기
[하코사 세미나] 비전공자의 자바스크립트 도전기 [하코사 세미나] 비전공자의 자바스크립트 도전기
[하코사 세미나] 비전공자의 자바스크립트 도전기 인권 김
 
Scala, Scalability
Scala, ScalabilityScala, Scalability
Scala, ScalabilityDongwook Lee
 
Domain Specific Languages With Groovy
Domain Specific Languages With GroovyDomain Specific Languages With Groovy
Domain Specific Languages With GroovyTommy C. Kang
 
Javascript 조금 더 잘 알기
Javascript 조금 더 잘 알기Javascript 조금 더 잘 알기
Javascript 조금 더 잘 알기jongho jeong
 
Angular2 가기전 Type script소개
 Angular2 가기전 Type script소개 Angular2 가기전 Type script소개
Angular2 가기전 Type script소개Dong Jun Kwon
 
Why what how kotlin
Why what how kotlinWhy what how kotlin
Why what how kotlinSewonKo
 
엄준일 04일차 HTML/Javascript 교육
엄준일 04일차 HTML/Javascript 교육엄준일 04일차 HTML/Javascript 교육
엄준일 04일차 HTML/Javascript 교육준일 엄
 
프론트엔드스터디 E04 js function
프론트엔드스터디 E04 js function프론트엔드스터디 E04 js function
프론트엔드스터디 E04 js functionYoung-Beom Rhee
 
120908 레거시코드활용전략 4장5장
120908 레거시코드활용전략 4장5장120908 레거시코드활용전략 4장5장
120908 레거시코드활용전략 4장5장tedypicker
 
Development AR App with C++ and Windows Holographic API
Development AR App with C++ and Windows Holographic APIDevelopment AR App with C++ and Windows Holographic API
Development AR App with C++ and Windows Holographic APIYEONG-CHEON YOU
 
스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오Taeoh Kim
 

Similar to javascript01 (20)

Javascript
JavascriptJavascript
Javascript
 
비전공자의 자바스크립트 도전기
비전공자의 자바스크립트 도전기비전공자의 자바스크립트 도전기
비전공자의 자바스크립트 도전기
 
4-1. javascript
4-1. javascript4-1. javascript
4-1. javascript
 
자바스크립트.
자바스크립트.자바스크립트.
자바스크립트.
 
[하코사 세미나] 비전공자의 자바스크립트 도전기
[하코사 세미나] 비전공자의 자바스크립트 도전기 [하코사 세미나] 비전공자의 자바스크립트 도전기
[하코사 세미나] 비전공자의 자바스크립트 도전기
 
Scala, Scalability
Scala, ScalabilityScala, Scalability
Scala, Scalability
 
Scalability
ScalabilityScalability
Scalability
 
Domain Specific Languages With Groovy
Domain Specific Languages With GroovyDomain Specific Languages With Groovy
Domain Specific Languages With Groovy
 
Javascript 조금 더 잘 알기
Javascript 조금 더 잘 알기Javascript 조금 더 잘 알기
Javascript 조금 더 잘 알기
 
Javascript
JavascriptJavascript
Javascript
 
C++에서 Objective-C까지
C++에서 Objective-C까지C++에서 Objective-C까지
C++에서 Objective-C까지
 
Angular2 가기전 Type script소개
 Angular2 가기전 Type script소개 Angular2 가기전 Type script소개
Angular2 가기전 Type script소개
 
Java script
Java scriptJava script
Java script
 
Why what how kotlin
Why what how kotlinWhy what how kotlin
Why what how kotlin
 
엄준일 04일차 HTML/Javascript 교육
엄준일 04일차 HTML/Javascript 교육엄준일 04일차 HTML/Javascript 교육
엄준일 04일차 HTML/Javascript 교육
 
프론트엔드스터디 E04 js function
프론트엔드스터디 E04 js function프론트엔드스터디 E04 js function
프론트엔드스터디 E04 js function
 
120908 레거시코드활용전략 4장5장
120908 레거시코드활용전략 4장5장120908 레거시코드활용전략 4장5장
120908 레거시코드활용전략 4장5장
 
06장 함수
06장 함수06장 함수
06장 함수
 
Development AR App with C++ and Windows Holographic API
Development AR App with C++ and Windows Holographic APIDevelopment AR App with C++ and Windows Holographic API
Development AR App with C++ and Windows Holographic API
 
스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오
 

More from ChangHyeon Bae

More from ChangHyeon Bae (14)

Webpack&babel
Webpack&babelWebpack&babel
Webpack&babel
 
ES6-02
ES6-02ES6-02
ES6-02
 
javascript03
javascript03javascript03
javascript03
 
javascript02
javascript02javascript02
javascript02
 
Java memory
Java memoryJava memory
Java memory
 
JavaScript 실행컨텍스트와 클로저
JavaScript 실행컨텍스트와 클로저JavaScript 실행컨텍스트와 클로저
JavaScript 실행컨텍스트와 클로저
 
WAS와 웹서버 간단 정리
WAS와 웹서버 간단 정리WAS와 웹서버 간단 정리
WAS와 웹서버 간단 정리
 
REST Concept
REST ConceptREST Concept
REST Concept
 
Srping data rest
Srping data restSrping data rest
Srping data rest
 
Angular 살짝 해보고 발표.
Angular 살짝 해보고 발표.Angular 살짝 해보고 발표.
Angular 살짝 해보고 발표.
 
OOP - Object Oriendted Programing
OOP - Object Oriendted ProgramingOOP - Object Oriendted Programing
OOP - Object Oriendted Programing
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
 
DI - Dependency Injection
DI - Dependency InjectionDI - Dependency Injection
DI - Dependency Injection
 
CDN - Content Delivery Network
CDN - Content Delivery NetworkCDN - Content Delivery Network
CDN - Content Delivery Network
 

javascript01

  • 1. 발표자 : zero86 Javascript study 문법, 변수, 스코프
  • 3. Javascript 문법 및 정의 정의 - 프로그래밍 언어 / 인터프리터 언어(별도의 컴파일 과정을 거치지 않고 즉시 실행) - Prototype 기반 언어 - 객체지향언어이자 1급 함수를 취급하는 언어 - 정적인 HTML 문서를 동적인 상태로 조작가능(DOM : Document Object Model)하도록 해주는 요소 문법 - 인라인 작성(inline) 01 - Javascript 문법 <ul> <li onClick='alert("월월")'>강아지</li> <li>개돼지</li> <li onClick='alert("멍멍")'>월요일만 짓는개</li> </ul>
  • 4. Javascript 문법 및 정의 문법 - 인터널 작성(internal) 01 - Javascript 문법 <html> <head> </head> <body> <div id="dog"> div dog </div> </body> </html> <script> var dogElement = document.getElementById('dog'); dogElement.addEventListener('click', function() { alert('인터널 멍멍!'); }); </script> - 익스터널 작성(external) script 태그 src 속성에 *.js 파일을 지정 <html> <head> </head> <body> <div id="dog"> external dog </div> </body> </html> <script src='app.js'> </script>
  • 5. Javascript 문법 및 정의 문법 01 - Javascript 문법 <html> <head> </head> <body> <div id="dog"> div dog1 </div> </body> </html> <script> // window 객체에 이벤트 등록(이벤트명, 이벤트 완료 시 실행할 함수 작성) window.addEventListener('DOMContentLoaded', function(){ alert('DOMContentLoaded..'); // 알림창 출력 }); // window 객체에 이벤트 등록 window.addEventListener('load', function() { alert('All assets are loaded..'); // 알림창 출력 }); /* window.onload = function() { alert('body onload..'); }; document.body.onload = function() { alert('body onload..'); } */ </script>
  • 6. Javascript 변수 변수정의 var 키워드 사용 예) var a; 변수할당 var a = 10; // 10이라는 값을 a변수에 할당 변수사용 var a = 'Hello World'; console.log(a); // 콘솔에 a 변수 내용 출력 02 - Javascript 변수
  • 7. Javascript 변수 자바스크립트는 느슨한타입, 동적타입 특징을 가지고 있다. 그말은 변수의 타입을 미리 선언할 필요가 없다는 뜻이다. 원시타입(Primitive Type) boolean / number / string / null / undefined 참조타입(Reference Type) object : 함수, 배열, 일반 객체 null 같은 경우, typeof 연산자를 보면 object라 고 출력이 되지만, 원시타입이며 설계오류이다. 02 - Javascript 변수 변수타입(자료형) var a = 1; var aa = 1.54; var b = 'Hello World'; var c = []; var cc = new Array(); var d = {}; var e = function() { }; var f = null; var g = undefined; var h; var i = true; console.log(typeof a); // number console.log(typeof aa); // number console.log(typeof b); // string console.log(typeof c); // object console.log(typeof cc); // object console.log(typeof d); // object console.log(typeof e); // functoin console.log(typeof f); // object console.log(typeof g); // undefined console.log(typeof h); // undefined console.log(typeof i); // boolean
  • 8. Javascript 변수 call By Value - 원시타입인 경우, 콜바이벨류로 동작 - 해당값을 복사하며, 전혀 다른 주소다 * 원시타입은 값을 변수에 그대로 할당 call By Reference - 원시타입이 아닌 경우, 콜바이레퍼런스로 동작 - 값을 복사하나, 변수에 할당된 주소값을 복사 * 레퍼런스 타입은 원본값을 참조하기 위해, 변 수에 주소값을 할당 02 - Javascript 변수 function callByValue(num) { num++; console.log(num); // 101 console.log(numA); // 100 } function callByReference(obj) { obj.num++; console.log(obj.num); // 101 console.log(objA.num); // 101 console.log(this.obj); } var numA = 100; var objA = { num : 100 }; var obj = { num : 200 }; console.log(window.obj); callByValue(numA); // numA 인자를 넘겨준다. callByReference(objA); // objA 인자를 넘겨준다.
  • 9. Javascript 변수 복사 = 연산자를 이용해서 변수의 내용을 복사 pass by value 이기 때문에, 복사한다고 볼 수 있 다. 예) var a = 10; var b = a; // b변수에는 a변수에 있는 값이 할당된다. 깊은복사(Deep copy) 값을 완전히 복사한다. 독립적이다. 얕은복사(Shallow copy) 참조값을 복사한다. 참조값이 복사되었기 때문에, 독립적이지 않다. 그렇다면, 참조타입에 대한 깊은복사를 하려면? 1. 새로운 배열 / 객체를 생성하여 담는다. 2. 재귀형식의 사용자 정의 함수 작성 3. JSON.stringify() / JSON.parse() 메서드 이용 02 - Javascript 변수 var a = 10; var aCopy = a; aCopy = 100; console.log(a); console.log(aCopy); var b = {num : 10}; var bCopy = b; bCopy.num = 100; console.log(b) console.log(bCopy)
  • 10. Javascript 변수 값 변환 변수에 담긴 어떤 값을 다른 타입의 값으로 바꾸 는 과정. 명시적이면, 타입 캐스팅 암시적이면, 강제변환 이라고 한다. 예) var a = 7; var b = a + ''; // 암시적 강제변환 var c = String(a); //명시적 강제변환 함수 new 키워드가 붙지 않 기 때문에, 객체를 생성하는 것이 아니다. String() Number() Boolean() 02 - Javascript 변수 False 한 값 JS에서는 일부값을 boolean 으로 강제변환했을 때, false가 되는 값들이 존재한다. - undefined - null - false - +0 / -0 / NaN - '' (빈문자열) 위 값들을 boolean 으로 강제변환하면 false다.
  • 11. Javascript 스코프 정의 - 접근할 수 있는 영역 - 유효범위를 의미(유효범위는 어느범위까지 참조하는지 접근성을 의미) 종류 - global scope or 전역 스코프 - 함수 레벨 스코프 - ES6 부터는 블록레벨스코프를 지원한다. 03 - Javascript 스코프 var hello = 'Hello CSS-Tricks Reader!' // 전역변수 function sayHello () { console.log(hello) } console.log(hello) // 'Hello CSS-Tricks Reader!' sayHello() // 'Hello CSS-Tricks Reader!' function sayHello () { var hello = 'Hello CSS-Tricks Reader!' // 함수레벨스코프 if(true) { var test = 'test IF'; } console.log(hello) console.log(test); // test IF } sayHello() // 'Hello CSS-Tricks Reader!' console.log(hello) // Error, hello is not defined
  • 12. Javascript 스코프 렉시컬 스코프 - 정적스코프라고도 불리운다. - 대부분의 언어들은 렉시컬 스코프를 따른다. - 스코프가 정의가 되어있는 해당 문맥(context)에서 결정이 된다. - 내부에서 외부로 검색하여 올라간다(scope chain) / 외부에서 내부로 검색 또는 참조할수 없다. - 스코프에서 검색이 되어 감지가되면, 더이상 검색을하지 않는다. 03 - Javascript 스코프 function outerFunction () { var outer = 'outer function!' function innerFunction() { var inner = 'inner function!' console.log(outer) // outer function! } console.log(inner) // Error, inner is not defined }
  • 13. Javascript 스코프 정리 - 스코프는 어디서 어떻게 변수를 찾는가를 결정 (영역이 어디까지일까?) foo 스코프에서 a / b 변수를 탐색한다. b 를 찾지못해, 글로벌 스코프까지 탐색영역을 확대한다. 앗 b를 찾았네!! 가져다 쓰자. 현재 스코프에서 변수를 찾기 시작하고, 찾지 못하면 상위 스코프로 한 단계씩 올라간다. 최상위 스코프에 도달하면 변수를 찾았든, 못찾았든 탐색을 중단. 2 + 2 = 4 03 - Javascript 스코프 function foo(a) { console.log(a+b); } var b = 2; foo(2); // 4