>  기사  >  웹 프론트엔드  >  Javascript 클로저에 대한 코드 예제

Javascript 클로저에 대한 코드 예제

不言
不言앞으로
2019-03-05 13:51:502054검색

이 기사는 Javascript 클로저에 대한 코드 예제를 제공합니다. 필요한 친구가 참고할 수 있기를 바랍니다.

클로저

내부 함수를 외부에 저장하면 클로저가 생성됩니다. 클로저로 인해 원래 스코프 체인이 해제되지 않아 메모리 누수가 발생합니다

//内部的函数被返回到外部,必然形成闭包
function a(){
function b(){
var b = 234;
console.log(a);
}
var a = 123;
return b;
}
var demo = a();
demo(); // -->123
function test1(){
var num = 100;
function test2(){
num ++;
console.log(num);
}
return test2;
}
var demo1 = test1();
demo1();  //101
demo1();  //102
//
function test(){
            var arr = [];
            for(var i = 0; i < 10; i++){//当i = 10的时候循环停止
                arr[i] = function(){ //arr的每一位都是一个函数
                    console.log(i);//虽然函数已经定义,但未执行
                }
            }
            return arr;
        }
        var myArr = test();
        for(var i = 0; i < myArr.length; i++ ){
            myArr[i]();
        }

마지막 함수가 실행되면 테스트 AO의 i가 호출됩니다

AO{
i = 10;
}

해결 방법: 함수를 즉시 실행하세요

function test() {
            var arr = [];
            for(var i = 0; i < 10; i++) {
                (function(j) {
                    arr[j] = function() {
                        console.log(j);
                    }
                }(i))
            }
            return arr;
        }
        var myArr = test();
        for(var i = 0; i < myArr.length; i++) {
            myArr[i]();
        }

1. 공개 구현 변수

예: 함수 누산기

function add(){
var count = 0;
function demo(){
count ++ ;
console.log(count);
}
return demo;
}
var counter = add();
counter();

2. 캐시 가능

예:eater

function test2(){
var food = &#39;apple&#39;;
var obj = {
eatFood : function(){
if(food != ""){
console.log("I am eatting " + food);
food = &#39;&#39;;
}else{
console.log("There is nothing! empty!");
}
},
pushFood : function(myFood){
food = myFood;
}
}
return obj;
}
var obj = test2();
obj.eatFood();
obj.eatFood();
obj.pushFood(&#39;banana&#39;);
obj.eatFood();

3. 속성을 캡슐화할 수 있습니다.

예: 사람();

위 내용은 Javascript 클로저에 대한 코드 예제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제