>  기사  >  웹 프론트엔드  >  js에서 클로저의 정의는 무엇입니까? JS 클로저의 애플리케이션 시나리오

js에서 클로저의 정의는 무엇입니까? JS 클로저의 애플리케이션 시나리오

不言
不言원래의
2018-09-10 17:29:052871검색

이 기사에서 알 수 있는 것은 js에서 클로저의 정의가 무엇입니까? JS 클로저의 적용 시나리오에는 특정 참조 값이 있습니다. 도움이 필요한 친구가 이를 참조할 수 있기를 바랍니다.

클로저란 무엇인가요

클로저란 다른 함수의 범위에 있는 변수에 접근할 수 있는 함수를 말합니다.

function createFunc() {
    var name = "wheeler";
    return function () {
        return name;
    }
}

var nameFunc = createFunc();  // nameFunc是一个闭包

var name = nameFunc();

console.log(name);

// 解除对匿名函数的应用(以便释放内存)
nameFunc=null;

내부 함수는 외부 함수의 변수 이름에 접근할 수 있습니다.
(클로저는 함수의 범위를 전달하므로) 포함하면 과도한 메모리 사용량이 발생할 수 있으므로 주의해서 클로저를 사용하세요)

블록 수준 범위를 모방하여 클로저로 인한 과도한 메모리 사용량을 줄일 수 있습니다

// 块级作用域(通常称为私有作用域)的匿名函数的语法
(function(){
    // 块级作用域
})();

Define 블록 수준 범위의 클로저

// 可以减少闭包占用的内存问题,因为没有指向匿名函数的引用。只要函数执行毕,就可以立即销毁其作用域链了
(function(){
    function createFunc() {
        var name = "wheeler";
        return function () {
            return name;
        }
    }

    var nameFunc = createFunc();

    var name = nameFunc();

    console.log(name);
})();

클로저의 애플리케이션 시나리오

  • 클로저를 사용하여 프라이빗 메소드 시뮬레이션

  • # 🎜🎜#
var returnNum = (function () {
    var num = 0;

    function changeNum(value) {
        num = value;
    }

    return {
        add: function () {
            changeNum(10);
        },
        delete: function () {
            changeNum(-10);
        },
        getNum: function () {
            return num;
        }
    }
})();

// 闭包
console.log(returnNum.getNum());
returnNum.add();
console.log(returnNum.getNum());
returnNum.delete();
console.log(returnNum.getNum());
  • cache

var CacheCount = (function () {
    var cache = {};
    return {
        getCache: function (key) {
            if (key in cache) {// 如果结果在缓存中
                return cache[key];// 直接返回缓存中的对象
            }
            var newValue = getNewValue(key); // 外部方法,获取缓存
            cache[key] = newValue;// 更新缓存
            return newValue;
        }
    };
})();

console.log(CacheCount.getCache("key1"));
  • 캡슐화

    # 🎜 🎜 #

    var person = function(){
        var name = "default";//变量作用域为函数内部,外部无法访问
        return {
            getName : function(){
                return name;
            },
            setName : function(newName){
                name = newName;
            }
        }
    }();
    
    console.log(person.name);// undefined
    console.log(person.getName());
    person.setName("wheeler");
    console.log(person.getName());
    setTimeout
  • function func(param) {
        return function() {
            console.log(param);
        }
    }
    var myFunc = func('wheeler');
    setTimeout(myFunc, 1000);
    함수 내 변수 보안 .
  • 메모리에 변수를 유지합니다.
  • 관련 추천:

js 클로저란 무엇인가요? js 클로저 이해하기(코드 포함)

js 클로저란 무엇인가요? js 클로저 이해하기

위 내용은 js에서 클로저의 정의는 무엇입니까? JS 클로저의 애플리케이션 시나리오의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.