位置: 编程技术 - 正文

浅析JavaScript中的变量复制、参数传递和作用域链(javascript概述及作用)

编辑:rootadmin

推荐整理分享浅析JavaScript中的变量复制、参数传递和作用域链(javascript概述及作用),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:javascript概述,javascript definitive guide,javascript entries,javascript概述及作用,javascript entries,javascript的,javascript概述及作用,细说javascript,内容如对您有帮助,希望把文章链接给更多的朋友!

今天在看书的过程中,又发现了自己目前对Javascript存在的一个知识模糊点:JS的作用域链,所以就通过查资料看书对作用域链相关的内容进行了学习。今天学习笔记主要有这样几个关键字:变量、参数传递、执行环境、变量对象、作用域链。

  1.变量

  变量需要注意的有两点:变量声明和复制变量值。

  变量声明肯定大家都很熟悉,在JS中我们都是通过 var 关键字进行变量声明的。JS中规定,通过var声明的变量会被添加到最近的环境中,如果声明并且初始化一个变量没有用到var关键字,这个变量会被添加到全局环境中。

  关于复制变量值,因为变量的类型不同复制的过程也不同。如果变量是一个基本类型的变量的话,复制变量值时会给新复制出的变量分配新的空间,两个变量值互不影响;如果变量是一个引用类型的话,复制的操作其实是让两个变量指向了同一处内存空间,修改其中一个,另一个也会跟着改变。《Javascript 高级程序设计》中的图例其实很形象            

  2.参数传递

  JavaScript中的参数传递全部是按照值传递的。基本类型做参数一般都不会有什么困惑,如果引用类型做了参数,类似下面这个例子:

浅析JavaScript中的变量复制、参数传递和作用域链(javascript概述及作用)

  这个例子中我们在setName中修改了变量的内容,在函数外也生效了。刚开始我也以为程序执行应该会弹出 undefined 或者报错,但是却弹出了在函数的作用域中修改的值。分析了一下参数传递的整个过程,这个疑惑就解决了。在参数传递的过程中,有很重要的一步:变量值复制。我们在调用函数时其实进行了 obj=person 这样一步操作,所以根据上面提到的引用类型变量值复制的特点,当我们修改obj时,同时也就修改了person的值。所以JS参数传递的方式是值传递,并且只能是值传递。

  3.执行环境、变量对象、作用域链

  我对执行环境、执行环境的理解有点类似与类和对象:

  执行环境中定义了变量、函数和函数可以访问到的其他数据,而当这个执行环境被激活时,就会根据这个执行环境创建出一个变量对象提供给解析器使用。执行环境就好比是类,变量对象就对应是对象。

  当一个执行环境激活时,它就会被推入一个栈的栈顶中执行,当它执行完毕,会将它移出栈,执行在它之前进入栈的环境,以此类推。

  而作用域链相当于一个存放变量对象的栈,越早被激活的执行环境创建出的变量对象越在下面,当前激活的执行环境的变量对象位于栈顶。如果当前执行环境执行完毕,那么就需要将栈顶的变量对象(对应执行环境)从栈顶移出。

  而执行环境在执行时,解析器需要访问变量等数据都是从作用域顶端开始查找,也就是从当前执行环境对应的变量对象开始查找,如果查找不到,则往下进入外层执行环境对应的变量对象中查找,一直持续到找到需要的对象或找到全局环境的变量对象为止。所以这种查找方式也就说明了太多定义在全局环境中的变量比较影响程序的性能。

  今天学习的东西主要是概念性质的,而且比较抽象。但是这部分对于后面所有的知识都是基础,像是之后的闭包啊,继承啊,原型啊都要对这部分内容有很好的理解才能学的更明白透彻,所以这部分内容应该反复学习,要相信温故而知新,古人诚不欺我也(&#;&#;&#;&#;)&#;&#;

详解iframe与frame的区别 开门见山了,大家需要注意的地方:HTML5不再支持使用frame,iframe只有src属性一、使用iframe的优缺点优点:1.程序调入静态页面比较方便;2.页面和程序分离;

简单的JS时钟实例讲解 本文实例介绍了JS时钟实现代码,分享给大家供大家参考,具体内容如下效果图:具体代码:!DOCTYPEhtmlhtmllang="en"headmetacharset="gb"titleDocument/titlescripttype

轻松实现javascript图片轮播特效 本文实例介绍了javascript图片轮播特效的详细代码以及实现思路,分享给大家供大家参考,具体内容如下还是先来看一看效果图:具体代码:一、HTML代码

标签: javascript概述及作用

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

上一篇:JavaScript类型检测之typeof 和 instanceof 的缺陷与优化(js检测类型的方法)

下一篇:详解iframe与frame的区别(iframe和frame)

  • 什么是企业增值税和所得税
  • 初中毕业可以考警察学校吗
  • 发票冲红重开,重开时是按新税率还是旧税率
  • 代开专票上的税额比电子缴款凭证上的税额少怎么调整
  • 出售简易征收的固定资产的增值税怎么计算
  • 高新技术企业发展现状
  • 开发区代管
  • 高新企业职工教育经费扣除比例
  • 进项税有余额但没有余额
  • 机器设备预付的费用计入
  • 公司化验室领用丙材料3000元
  • 固定资产未验收投入使用
  • 有关税收的征收管理规定介绍
  • 工程交税需要什么资料
  • 虚开增值税发票不能忽略的三个点!
  • 个人应纳税所得额怎么算
  • 企业出售已使用过的固定资产税率
  • 公积金贷款利息现在是多少
  • 资产负债表中的预付款项目应根据什么填列
  • 单位发的奖金怎样交个税
  • 利润表里的其他业务利润怎么形成的
  • 再生资源会计科目
  • 华为手机麦克风在哪里
  • 已达到计算机的连接数最大值win7
  • 往公户存钱怎么存最划算
  • 运输费用会计科目
  • win10清空回收站是灰色的
  • 个税这个月多交了下个月减回来
  • 固定资产公允价值变动会计处理
  • autoreg.exe
  • 应付股利属于债务吗
  • 鼠标按键多有用吗
  • 什么叫奖励旅游
  • cuda10.1下载
  • 总部资产减值测试例题
  • 普票部分红冲,还需要退回原发票吗
  • SSD目标检测算法
  • 固定资产减少的账务处理
  • Vue Element UI 中 el-table 树形数据 tree-props 多层级使用避坑
  • 微信小程序获取地理位置
  • 自动驾驶汽车决策与控制pdf
  • phpcms添加内容
  • 建设单位和施工单位的责任和义务
  • 小规模纳税人要缴纳哪些税
  • 智能手机登陆信息怎么删除
  • 购买商品优惠怎么做账
  • 个体工商户税收起征点是多少?
  • 接受银行承兑汇票的流程
  • 发行公司债券发生的折价
  • 企业无力支付票据
  • 房贷利息抵个税怎么申请
  • 税控服务费全额抵扣怎么申报
  • 印花税的计算公式应纳税所得额包含增值税吗
  • 公司股东的主要几种分类
  • 网站和店铺的区别
  • 深入sql编程开发与优化
  • phpstorm配置php环境 mac os
  • sqlserver 创建索引与使用
  • Cont()与Where().Count()有时性能差别如此之大!
  • mybatis怎么搭建
  • 如何解决windows10数据放到国外进行处理
  • iis设置mime
  • 如何关闭mac上的icloud
  • u盘装系统软件哪个好
  • 大白菜一键装机教程
  • 系统死锁或资源管理器崩溃时让xp系统自动重启的方法
  • 制作winxp启动u盘和安装盘
  • windows7开机
  • centos7安装MySQL8.0
  • linux的截图工具
  • 在布局中使用选定的比例
  • 搭建android开发环境时为什么要先安装jdk
  • Unity3D游戏开发标准教程吴亚峰于复兴人民邮电出版社
  • jquery 刷新div
  • javascirpt
  • 字典树原理
  • 移动退订业务怎么恢复
  • 小规模纳税人可以开13%的发票吗
  • 外购的解释
  • 发票专用章盖在哪里
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设