浅谈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调试工具栏配置指南

