位置: 编程技术 - 正文

一道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(详解各种汽油一吨等于多少升)

  • 价外费用纳税义务发生时间
  • 承兑汇票用开发票吗
  • 个税手续费怎么交增值税
  • 公司办资质的发票入什么科目
  • 研发人员差旅费可以资本化吗
  • 汽车申请报废了交强险能退吗
  • 清算期间作为纳税年度
  • 公司三年零申报后注销
  • 代开增值税票普票专票税点一样吗
  • 售后维修的配件开维修费
  • 没有抵扣的发票怎么入账
  • 别人帮开票钱要打给别人账户吗
  • 企业收到投资款怎么处理
  • 科技公司出售市场价格
  • 往来款 分录
  • 企业给员工发放最低生活保障
  • 原材料投资入股协议约定价值公允价值
  • 发票可以开具办公用品吗?
  • 税负率的计算公式excel
  • 退税上传,申报文件上传失败
  • 企业税前扣除凭证包括以下哪些方面
  • 混业经营如何缴税?
  • 文化事业建设税征税范围
  • 固定资产投资增长意味着什么
  • 国产设备购置投资由设备原价与什么构成
  • 电梯维保公司缴税标准
  • 企业所得税调增调减项目比例
  • 如何防御黑客入侵
  • php生成文件流
  • 怎么打开win11的控制面板
  • php数组可以使用哪些键名
  • cpqeadm.exe是什么进程 可以关闭吗 cpqeadm进程查询
  • php 生成缩略图
  • 仓储服务和不动产租赁
  • 罚款支出可以抵扣所得税吗
  • 社保缴费工资和实发工资不一样
  • vue3 ref dom
  • 扩散模型和gan的区别
  • 微擎框架安装教程
  • 残疾人就业保障金计入什么科目
  • 企业收到税务退税通知书
  • 看望员工现金属于什么费用
  • 工程结算成本和主营业务成本一样吗
  • 股东转让股权公司需要审查
  • 购买方收到红字发票怎么做凭证
  • 专票金额高于实收金额
  • 基本存款账户可以办理
  • 评估增值净利润调减
  • 融资租赁固定资产折旧年限
  • 主营业务收入的借贷方向
  • 商品流通企业进货费用先进行归集
  • 工会经费计提基数包括福利费吗
  • 不动产初始登记证明
  • 上月暂估成本次月用冲回吗
  • 国有独资企业是有限责任公司吗
  • 总资产报酬率的利息支出是财务费用吗
  • 进项税转出补税按多少补税
  • 在sql server中使用对象资源管理器和SQL
  • mysql数据库windows
  • win95开始菜单
  • 流言:Win9或终止32位系统 加速64位平台
  • win10系统怎么关闭自动更新
  • win7或win8、win8.1系统下安装ubuntu实现双系统图文教程
  • centos的安装步骤
  • win7如何查询电脑使用记录
  • window10添加虚拟网卡
  • 如何制作批处理
  • Cocos2dx 3.0 lambda表达式的使用
  • bootstrap基础教程
  • js数组随机抽奖
  • jquery 回车
  • 运行shell脚本命令 sh
  • jquery 图片裁剪
  • androidのLinearLayout中组件右对齐
  • mac版本eclipse 怎么使用
  • 房屋维修基金会计分录处理
  • 国地税联合办公
  • 奔驰g500落地多少
  • 2019小规模纳税人标准
  • 2022年太原医保缴费时间
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设