浅谈javascript的闭包
发布时间 - 2026-01-10 22:45:40 点击率:次关于闭包的解释

我们将作用域链描述为一个对象列表,不是绑定的栈。每次调用javascript函数的时候,都会为之创建一个新的对象来保存变量,把这个对象添那个加至作用域中,当函数返回时,就从作用域链中将这个绑定变量的对象删除,如果不存在嵌套函数,也没有其他引用指向这个绑定的对象,它就会被当垃圾回收掉,
(function () {
var val = null;
var callback;
setTimeout(function () {
val = 1;
callback(val)
},1000)
window.getVal = function(fn){
callback = fn;
}
})();
(function(){
var b =3;
getVal(function (val) {
console.log(val);//1
console.log(b); //3
getVal(function (val) {
console.log(val);
console.log(b); //这里为什么还能打印出b这个变量呢/.
});
//这里匿名函数其实就是一个闭包,你就相当于通过getVal函数把这个闭包传递出去了,你想想看,闭包是不是这样?
})();
//2作用域
(function(){
var b =3;
var ret = function (val) {
console.log(val);
利用闭包实现的私有属性存取方法
function c
return {
count:function(){
return n++;
}
};
}
var a=counter();
alert(a.count());//返回的0;
alert(a.count());//返回的是1;
定义的闭包实现的私有属性方法
function addPrivateProperty(o,name,predicate){
var value;
o["get"+name]=function(){return value);}//get 存取器的属性只读,将其直接简单的返回
//setter方法检验值是否合法,若不合法就抛出异常
o["set"+name]=function(v){{
if(predicate&&!predicate(v)) throw Error("");
else {
value=v;
}
}
典型错误
function constfuncs(){
var funcs=[];
for(var i=0;i<10;i++){
funcs[i]=function(){return i;};
}
return funcs;
}
var func=constfuncs();
console.log(func[5]());
;//返回值? 10
由于此函数的闭包都是在同一个函数调用中定义的,因此可以共享变量i;
关联到闭包的作用域链都是活动的,嵌套的函数不会将作用域内的私有成员复制一份,也不会对所绑定的变量生成静态快照;在闭包时后this是javascript的一个关键字而不是变量
解决办法
function Bb(){
this.run=function(){}//this就是Bb这个对象;
}
而function run(){
function gg(){alert(this就是window)}//this就是window;`
}
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
# javascript
# 闭包
# JavaScript闭包和回调详解
# 浅谈JS封闭函数、闭包、内置对象
# 深入理解Javascript中的作用域链和闭包
# JavaScript中闭包的详解
# JS闭包用法实例分析
# 轻松理解JavaScript闭包
# 轻松学习Javascript闭包
# 详谈JavaScript的闭包及应用
# 理解javascript中的闭包
# 通过示例彻底搞懂js闭包
# 绑定
# 都是
# 的是
# 就会
# 也不
# 你就
# 还能
# 你想
# 将其
# 不存在
# 会对
# 为之
# 想看
# 于此
# 会将
# 若不
# 解决办法
# 创建一个
# 抛出
# 返回值
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】
Laravel如何使用Blade组件和插槽?(Component代码示例)
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
打造顶配客厅影院,这份100寸电视推荐名单请查收
智能起名网站制作软件有哪些,制作logo的软件?
进行网站优化必须要坚持的四大原则
js代码实现下拉菜单【推荐】
php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】
Laravel项目怎么部署到Linux_Laravel Nginx配置详解
如何注册花生壳免费域名并搭建个人网站?
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
实例解析Array和String方法
Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能
详解Oracle修改字段类型方法总结
Laravel如何创建自定义中间件?(Middleware代码示例)
Laravel Blade模板引擎语法_Laravel Blade布局继承用法
如何快速上传建站程序避免常见错误?
Laravel中的withCount方法怎么高效统计关联模型数量
java中使用zxing批量生成二维码立牌
如何登录建站主机?访问步骤全解析
简历没回改:利用AI润色让你的文字更专业
在线教育网站制作平台,山西立德教育官网?
利用 Google AI 进行 YouTube 视频 SEO 描述优化
Java类加载基本过程详细介绍
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
怎样使用JSON进行数据交换_它有什么限制
详解jQuery中基本的动画方法
如何在IIS7上新建站点并设置安全权限?
如何快速生成橙子建站落地页链接?
微信小程序 HTTPS报错整理常见问题及解决方案
Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门
ChatGPT 4.0官网入口地址 ChatGPT在线体验官网
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】
Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】
香港服务器网站推广:SEO优化与外贸独立站搭建策略
Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】
Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)
利用python获取某年中每个月的第一天和最后一天
Laravel如何生成和使用数据填充?(Seeder和Factory示例)
如何用AI帮你把自己的生活经历写成一个有趣的故事?
iOS UIView常见属性方法小结
🚀拖拽式CMS建站能否实现高效与个性化并存?
网站制作软件有哪些,制图软件有哪些?
ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】
Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践
如何在服务器上三步完成建站并提升流量?
如何生成腾讯云建站专用兑换码?
Laravel路由怎么定义_Laravel核心路由系统完全入门指南
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?

