(자바스크립트) 함수 내포와 범위
var migrating=true;
var fly=function(num){
var sound="훨훨";
function wingFlapper(){
console.log(sound);
}
for (var i=0; i<num; i++){
wingFlapper();
}
};
function quack(num){
var sound="꽥";
var quacker= function(){
console.log(sound);
};
for( var i=0; i<num; i++){
quacker();
}
}
if(migrating){
quack(4);
fly(4);
}
설명: 코드의 최상위에서 정의된 것은 모두 전역범위이다.. 그러므로 fly와 quack는 전역변수가 된다. 그렇지만 fly함수는 함수 표현식을 평가한 후에 정의된다는것 점에 주의해야 한다.
wingFlapper()함수는 fly()함수 안에서 함수 선언으로 정의되어 있으므로 범위가 fly()함수 내부로 한정된다. 따라서 fly()함수 본체 어디에서든 wingFlapper()를 사용할 수 있다.
quacker()는 quack()함수 안에서 함수 표현식으로 정의되어 있으므로 범위가 quack()함수 내부이다. 그렇지만 함수 표현식을 평가한 후에 정의되므로, 정의된 후에야 사용할 수 있다.
var fly=function(num){
var sound="훨훨";
function wingFlapper(){
console.log(sound);
}
for (var i=0; i<num; i++){
wingFlapper();
}
};
function quack(num){
var sound="꽥";
var quacker= function(){
console.log(sound);
};
for( var i=0; i<num; i++){
quacker();
}
}
if(migrating){
quack(4);
fly(4);
}
설명: 코드의 최상위에서 정의된 것은 모두 전역범위이다.. 그러므로 fly와 quack는 전역변수가 된다. 그렇지만 fly함수는 함수 표현식을 평가한 후에 정의된다는것 점에 주의해야 한다.
wingFlapper()함수는 fly()함수 안에서 함수 선언으로 정의되어 있으므로 범위가 fly()함수 내부로 한정된다. 따라서 fly()함수 본체 어디에서든 wingFlapper()를 사용할 수 있다.
quacker()는 quack()함수 안에서 함수 표현식으로 정의되어 있으므로 범위가 quack()함수 내부이다. 그렇지만 함수 표현식을 평가한 후에 정의되므로, 정의된 후에야 사용할 수 있다.
댓글
댓글 쓰기