浅谈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核心路由系统完全入门指南  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?