-유효범위
전역변수 _앱 전역에서 접근이 가능한 변수 (함수 바깥에서 선언
지역변수 _함수 안에서 접근 가능한 변수
같은 이름의 지역, 전역변수가 동시에 정의돼있으면 지역변수가 우선.
지역변수를 선언할 때 var을 사용하지 않으면 전역변수가 됨.
지역변수를 사용하는 것이 좋음 (함수의 핵심은 로직의 재활용
전역변수를 사용해야 할 때는 사용하는 이유를 명확히 알고 있을 때 사용할 것.
전역변수는 각기 다른 로직에서 사용하는 같은 이름의 변수값을 변경시켜 의도치 않은 문제를 발생시킨다.
-불가피하게 전역변수를 사용해야 하는 경우는 하나의 객체를 전역변수로 만들고 객체의 속성으로 변수를 관리하는 방법을 사용한다.
전역변수를 사용하고 싶지 않다면 익명함수를 호출한다.
함수 끝에 () 붙이고 함수 전체와 ()를 또 ()로 묶어주는 것 _익명함수, 자스에서 로직을 모듈화하는 일반적인 방법.
-자바스크립트에서 유효범위의 대상, 지역변수를 선언할 수 있는 곳은 함수로 제한됨
자바스크립트는 함수의 중괄호 안에서 선언된 변수만이 해당 함수의 지역변수가 되는 것이고,
for, if문 안에서 선언된 변수는 지역변수로써의 의미를 갖지 않는다.
자바에서는 for문 안에 선언된 지역변수를 for문 밖에서 호출할 수 없으나 자바스크립트에서는 가능
-정적 유효범위 _자바스크립트는 함수가 선언된 시점에서의 유효범위를 갖는다.
이러한 유효범위의 방식을 정적 유효범위static scoping 혹은 렉시컬lexical scoping 이라고 한다.
var i = 5;
function a(){
var i = 10;
b();
}
function b(){
document.write(i);
}
a();
여기서 함수 b의 i는 함수 a의 i인 10을 호출하게 될 것인가 전역변수 i의 값인 5를 호출하게 될 것인가
사용될 때가 아니라 정의될 때의 전역변수가 사용되게 되므로 5가 호출되고, 이것을 정적 유효범위라 한다.
만약 10이 호출된다면 동적 유효범위라 할 것
-값으로서의 함수
자스에서는 함수도 객체, 일종의 값.
거의 모든 언어가 함수를 가지고 있는데 자스의 함수가 다른 언어의 함수와 다른 점은 함수가 값이 될 수 있다는 점
//함수
function a () {}
var a = function() {} //으로 이해하면 함수a 가 변수a 에 담겼다는 것을 이해하기 쉬움
함수a는 변수a에 담긴 값. 함수는 객체의 값으로 포함될 수 있음
메소드 method _이처럼 객체의 속성 값으로 담긴 함수
값으로서의 함수는 변수에만 담길 수 있는게 아니라
//객체 안에 저장된 함수 = 메소드
a = {
b:function(){
}
};
이렇게 객체 안에 저장될 수 도 있다
b는 key_변수와 같은 역할을 함. 다른 말로는 속성 property
이 속성에 저장된 값이 함수라면 그 함수를 메소드라고 함.
function은 value
함수는 값이기 때문에 다른 함수에 인자로 전달될 수 있다
값으로서의 함수와 콜백 - 생활코딩 (opentutorials.org)
변수, 매개변수, 리턴값 모두에 들어갈 수 있는 값을 first class citizen(object)라고 하는데 자바스크립트에서 함수가 이에 해당한다.
-콜백 _어떠한 함수가 수신하는 인자가 함수인 경우
처리의 위임
값으로 사용될 수 있는 특성을 이용하면 함수의 인자로 함수를 전달 가능
값으로 전달된 함수는 호출될 수 있기 때문에 함수의 동작을 완전히 바꿀 수 있다.
'Programming > Javascript' 카테고리의 다른 글
자바스크립트 객체 지향 (0) | 2022.02.11 |
---|---|
자바스크립트 콜백, 비동기처리. 비동기 콜백 (0) | 2022.02.06 |
생활코딩 자바스크립트 객체, 모듈, API (0) | 2022.01.15 |
생활코딩 자바스크립트 반복문까지 (0) | 2022.01.14 |
js부터 공부 (0) | 2021.12.30 |
댓글