本篇文章给大家带来的内容是关于js中闭包的定义是什么?js闭包的应用场景,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
闭包是指有权访问另一个函数作用域中的变量的函数。
function createFunc() {
var name = "wheeler";
return function () {
return name;
}
}
var nameFunc = createFunc(); // nameFunc是一个闭包
var name = nameFunc();
console.log(name);
// 解除对匿名函数的应用(以便释放内存)
nameFunc=null;内部函数可以访问外部函数的变量name,内部函数的作用域包含了外部函数的作用域
(由于闭包会携带包含它的函数的作用域,可能导致内存占用过多,因此谨慎使用闭包)
// 块级作用域(通常称为私有作用域)的匿名函数的语法
(function(){
// 块级作用域
})();将闭包定义在块级作用域里面
// 可以减少闭包占用的内存问题,因为没有指向匿名函数的引用。只要函数执行毕,就可以立即销毁其作用域链了
(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());缓存
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闭包的应用场景的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号