位置: 编程技术 - 正文

一道JS前端闭包面试题解析(前端闭包函数)

编辑:rootadmin

推荐整理分享一道JS前端闭包面试题解析(前端闭包函数),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:js闭包应用,javascript闭包例子,前端闭包函数,js中的闭包是什么,js闭包使用,js闭包应用,js闭包应用,js闭包有什么用,内容如对您有帮助,希望把文章链接给更多的朋友!

问题

代码A

求出程序输出

这是一个闭包测试题

转换为等价代码

return返回的对象的fun属性对应一个新建的函数对象,这个函数对象将形成一个闭包作用域,使其能够访问外层函数的变量n及外层函数fun,为了不将fun函数和fun属性搞混,我们将上述代码修改如下:代码B

那么就有同学问了,为什么可以这样改呢,你怎么能确定[1]处的fun不是[2]代码所在处的fun呢,要知道此处的fun属性可是指向一个函数对象哦~这里就要说到JS的词法作用域,JS变量作用域存在于函数体中即函数体,并且变量的作用域是在函数定义声明的时候就是确定的,而非在函数运行时。如下代码

一道JS前端闭包面试题解析(前端闭包函数)

好了我们回到题目,在函数声明定义阶段,[2]处的匿名函数进行定义声明,发现在[1]处需要引用一个名为fun的函数对象,那么首先在当前函数体内寻找,发现没有,那么就到其外层函数-这个匿名函数的包裹函数中去查找,发现也没有,到外层函数中去,发现外面没有函数包裹了,那就到全局环境下去找,额偶终于找到了......就把fun函数指定为全局环境下的fun函数对象并加入到匿名函数的闭包中去。至此我们就知道代码B为什么和代码A是等价的了~~~

创建闭包作用域

JS在词法分析结束后,确定了1个闭包,就是返回的对象fun属性对应的匿名函数的闭包-访问全局环境下的_func_及其外层函数的函数内部变量n;在每次_func_执行的时候,都会将闭包中变量的作用域信息传递到函数执行环境中,供函数执行时获取变量值时使用

执行输出

_fun_函数执行,因为第2个参数未定义,输出undefined。然后返回一个对象,带有fun属性,指向一个函数对象-带有闭包,能够访问到_fun_和变量n_a.fun(1)执行返回的对象的fun方法,传入m的值1,调用返回_fun_(1,0)所以输出为0,a.fun(2),a.fun(3)和a.fun(1)

var b=_fun_(0).fun(1).fun(2).fun(3);等价代码:

var b=_fun_(0);var b1=b.fun(1);var b2=b1.fun(2);//[3]var b3=b2.fun(3);//[4]前2句和上面的输出相同undefined,0,当[3]被调用时,b1对象中有一个闭包,引用了_fun_函数及外层函数变量n=1,所以匿名函数执行的函数调用为_fun_(2,1),输出结果为1,并返回一个新的对象。当[4]执行时,b2对象也有一个闭包,引用了_fun_函数及外层函数变量n=2,执行_fun_(3,2),输出结果为2

能看懂前面的代码执行解释,理解上面的代码执行输出就不会有问题了,希望大家喜欢。

不得不分享的JavaScript常用方法函数集(下) 本文中,收集了一些比较常用的Javascript函数,希望对学习JS的朋友们有所帮助。.替换元素$(document).ready(function(){$('#id').replaceWith('DIVIhavebeenreplaced/DIV');})

详解Document.Cookie 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。同时我们也看到,由于采用服务器端保持状态

认识Knockout及如何使用Knockout绑定上下文 Knockout介绍Knockout简称ko,是一个轻量级的javascript类库,采用MVVM设计模式(即Model、view、viewModel),简单优雅的实现了双向绑定,实时更新,帮助您使用

标签: 前端闭包函数

本文链接地址:https://www.jiuchutong.com/biancheng/385558.html 转载请保留说明!

上一篇:干货分享:让你分分钟学会javascript闭包(让你略表情包)

下一篇:详解Document.Cookie(详解各种汽油一吨等于多少升)

  • 附加税减免要做哪些科目
  • 递延所得税税率变化
  • 逆回购会不会亏本金
  • 代扣代缴完税凭证 要勾选吗
  • 预缴增值税 进项税扣除
  • 发票可不可以部分冲红
  • 投标保证金退回规定
  • 检测费用可以开什么发票
  • 无偿划拨资产的入账价值
  • 人员工资薪金所得税计算税款
  • 融资融券与普通证券交易的区别体现在
  • 未支付商标使用费怎么办
  • 所有者权益的利得和损失
  • 变更办税人信息在哪变更
  • 其他货币资金的概念
  • 递延所得税资产怎么计算
  • 房产企业竞标取消通知
  • 完工百分比法确认成本 分录
  • 红字增值税专用发票信息表怎么填
  • 收到一笔款在在当月已退回怎么做账?
  • 所得税申报季末资产总额怎么填
  • 购进生产用原材料,取得增值税专用发票注明税额25600元
  • 会员充值增送如何取消
  • 进口增值税可以抵扣销项税额吗
  • windows10不会自动锁屏
  • 奖金属于工资吗?要交税吗?
  • 在路由器设置中怎么设置
  • 苹果14数据线
  • 存货 计价
  • win7纯净版系统之家
  • php单例模式例子
  • PHP:is_dir()的用法_Filesystem函数
  • 包装物逾期是什么意思
  • 如何确定销售数量
  • laravel5.4生成验证码的实例讲解
  • 付境外人员劳务费
  • php生成随机字母数字代码
  • 利润分配反映什么
  • 教育局是一般纳税人吗
  • 织梦模板改成帝国模板
  • 营业总收入包括营业外收入吗
  • 金税四期的政策
  • 2021个税新规工资表公式
  • 如何区分生产类型
  • 购进国内交通运输产品
  • 生产线更新改造替换的旧设备
  • 业务招待费占管理费用的多少算合适
  • 收到退回的企业所得税会计分录
  • 预收账款计入应收账款怎么弄
  • 汽车价外费用
  • 备用金取多少钱会被监控
  • 财务费用的内容包括哪些
  • 小企业会计准则调整以前年度费用分录
  • 减免税款月末是否结平
  • 存货盘亏进项税额转出会计分录
  • 工会经费按照什么计算缴纳
  • 生产费用明细账
  • mysql数据类型decimal
  • 怎么提高sql语句
  • mysql速成要多久
  • windows10秋季创意者更新
  • mac开机后蓝屏没反应
  • centos root被锁定如何取消
  • 浏览网页跳转
  • rundll32.exe在哪个文件夹
  • win7怎么翻转桌面
  • win7鼠标右键一闪就没了
  • linux统计代码行数过滤空行
  • pqv2isvc.exe - pqv2isvc是什么进程 有什么作用
  • win7系统开机无限重启
  • vivo渠道服容易被找回吗
  • android recyclerview 拖拽加阴影
  • jquery中ajax跨域方法实例分析
  • oracle批处理语句
  • js如何使用
  • node 动态路由
  • 如何在Android上使用cv库
  • shaders initialized
  • 花店会计主要做什么
  • 古代税收和现代税收
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设