변수의 수명을 의미
var vscope = 'global';
function fscope() {
var vscope = 'local';
alert(vscope);
}
fscope();
function a()
{
var i = 0;
}
for (var i = 0; i < 5; i++)
{
a();
document.write(i);
}
function a()
{
i = 0; // 여기서 i = 0이 계속 초기화되기때문에 무한루프에 빠지게됨!
}
for (var i = 0; i < 5; i++)
{
a();
document.write(i);
}
var MYAPP = {} // 빈 객체 생성
MYAPP.calculator = {
'left' : null,
'right' : null
}
MYAPP.coordinate = {
'left' : null,
'right' : null
}
MYAPP.calculator.left = 10;
MYAPP.calculator.right = 20;
function sum() {
return MYAPP.calculator.left + MYAPP.calculator.right;
}
document.write(sum());
전역변수 MYAPP쓰기싫어..?
(function(){
var MYAPP = {} // 빈 객체 생성
MYAPP.calculator = {
'left' : null,
'right' : null
}
MYAPP.coordinate = {
'left' : null,
'right' : null
}
MYAPP.calculator.left = 10;
MYAPP.calculator.right = 20;
function sum() {
return MYAPP.calculator.left + MYAPP.calculator.right;
}
document.write(sum());
}())
익명함수로 전역변수 없앨수있음ㅋㅋ
자바스크립트는 함수에 대한 유효범위만을 제공해. 만ㅎ은언어들은 대체로 블록단위로 함
for (int i = 0; i < 10; i++)
{
String name = "egoing";
}
system.out.println(name);
==> 이러면 에러임 블록단위에서 이미 끝난거기때문에
for (var i = 0; i < 1; i++)
{
var name = 'coding everybody';
}
alert(name);
==> 자바스크립트에서 유효범위는 함수와 관련되어있기때문에 이게 가능함!
자바스크립트는 함수가 선언된 시점에서 유효범위를 갖는다.
var i = 5;
function a() {
var i = 10;
b();
}
function b() {
document.write(i); // b라는 함수안에 지역변수 이름 i가 있나? 없네. b를 호출하는 a함수의 i를 찾으러갈까 전역변수의 i를 찾으러갈까?
// 답은 전역변수 i가 사용되어 5가 찍히게됨. 다시말해, 사용될때가 아니고 정의될때의 전역변수가 사용된다는거야. 이런걸 정적 유효범위라고 해.
}
a();
b라는 함수안에 지역변수 이름 i가 있나? 없네. b를 호출하는 a함수의 i를 찾으러갈까 전역변수의 i를 찾으러갈까? // 답은 전역변수 i가 사용되어 5가 찍히게됨. 다시말해, 사용될때가 아니고 정의될때의 전역변수가 사용된다는거야. 이런걸 정적 유효범위라고 해. 렉시컬.