浅谈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


相关推荐: 香港服务器租用每月最低只需15元?  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  Laravel中的withCount方法怎么高效统计关联模型数量  高端网站建设与定制开发一站式解决方案 中企动力  Laravel怎么实现模型属性的自动加密  Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤  Laravel如何实现API资源集合?(Resource Collection教程)  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  Laravel如何实现一对一模型关联?(Eloquent示例)  html如何与html链接_实现多个HTML页面互相链接【互相】  javascript中的数组方法有哪些_如何利用数组方法简化数据处理  Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理  Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程  Laravel如何处理文件下载请求?(Response示例)  免费视频制作网站,更新又快又好的免费电影网站?  Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明  Laravel如何使用Sanctum进行API认证?(SPA实战)  js实现点击每个li节点,都弹出其文本值及修改  Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知  php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】  Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载  如何在宝塔面板创建新站点?  VIVO手机上del键无效OnKeyListener不响应的原因及解决方法  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  网站制作软件免费下载安装,有哪些免费下载的软件网站?  Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)  Laravel如何实现API版本控制_Laravel API版本化路由设计策略  Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】  瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口  济南网站建设制作公司,室内设计网站一般都有哪些功能?  个人网站制作流程图片大全,个人网站如何注销?  晋江文学城电脑版官网 晋江文学城网页版直接进入  实现点击下箭头变上箭头来回切换的两种方法【推荐】  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  Android 常见的图片加载框架详细介绍  安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  Laravel如何实现全文搜索功能?(Scout和Algolia示例)  详解jQuery中的事件  微信公众帐号开发教程之图文消息全攻略  PythonWeb开发入门教程_Flask快速构建Web应用  如何在云虚拟主机上快速搭建个人网站?  googleplay官方入口在哪里_Google Play官方商店快速入口指南  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  Python进程池调度策略_任务分发说明【指导】  佛山企业网站制作公司有哪些,沟通100网上服务官网?  如何基于PHP生成高效IDC网络公司建站源码?  百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏  Laravel Debugbar怎么安装_Laravel调试工具栏配置指南