位置: 编程技术 - 正文

深入解读JavaScript中的Hoisting机制(深入解读2023年一号文件)

编辑:rootadmin

推荐整理分享深入解读JavaScript中的Hoisting机制(深入解读2023年一号文件),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:java script,深入解读何暮楚,深入解读CIA含金量,深入解读的近义词,深入解读2023年一号文件,深入解读的近义词,深入解读CIA含金量,深入解读的近义词,内容如对您有帮助,希望把文章链接给更多的朋友!

hoisting机制

javascript的变量声明具有hoisting机制,JavaScript引擎在执行的时候,会把所有变量的声明都提升到当前作用域的最前面。

先看一段代码

这段代码运行的结果是什么呢?答案是:undefined这段代码说明了两个问题,第一,function作用域里的变量v遮盖了上层作用域变量v。代码做少些变动

输出结果为”hello”,说明javascript是没有块级作用域的。函数是JavaScript中唯一拥有自身作用域的结构。

第二,在function作用域内,变量v的声明被提升了。所以最初的代码相当于:

声明、定义与初始化

声明宣称一个名字的存在,定义则为这个名字分配存储空间,而初始化则是为名字分配的存储空间赋初值。用C++来表述这三个概念

extern int i;//这是声明,表明名字i在某处已经存在了int i;//这是声明并定义名字i,为i分配存储空间i = 0;//这是初始化名字i,为其赋初值为0javascript中则是这样

var v;//声明变量vv = "hello";//(定义并)初始化变量v因为javascript为动态语言,其变量并没有固定的类型,其存储空间大小会随初始化与赋值而变化,所以其变量的“定义”就不像传统的静态语言一样了,其定义显得无关紧要。

声明提升

当前作用域内的声明都会提升到作用域的最前面,包括变量和函数的声明

变量a,f,b,c的声明会被提升到函数作用域的最前面,类似如下:

请注意函数表达式并没有被提升,这也是函数表达式与函数声明的区别。进一步看二者的区别:

上面代码中函数声明f2被提升,所以在前面调用f2是没问题的。虽然变量f1也被提升,但f1提升后的值为undefined,其真正的初始值是在执行到函数表达式处被赋予的。所以只有声明是被提升的。

深入解读JavaScript中的Hoisting机制(深入解读2023年一号文件)

名字解析顺序

javascript中一个名字(name)以四种方式进入作用域(scope),其优先级顺序如下:1、语言内置:所有的作用域中都有 this 和 arguments 关键字2、形式参数:函数的参数在函数作用域中都是有效的3、函数声明:形如function foo() {}4、变量声明:形如var bar;

名字声明的优先级如上所示,也就是说如果一个变量的名字与函数的名字相同,那么函数的名字会覆盖变量的名字,无论其在代码中的顺序如何。但名字的初始化却是按其在代码中书写的顺序进行的,不受以上优先级的影响。看代码:

如果形式参数中有多个同名变量,那么最后一个同名参数会覆盖其他同名参数,即使最后一个同名参数并没有定义。

以上的名字解析优先级存在例外,比如可以覆盖语言内置的名字arguments。

命名函数表达式

可以像函数声明一样为函数表达式指定一个名字,但这并不会使函数表达式成为函数声明。命名函数表达式的名字不会进入名字空间,也不会被提升。

f();//TypeError: f is not a functionfoo();//ReferenceError: foo is not definedvar f = function foo(){console.log(typeof foo);};f();//functionfoo();//ReferenceError: foo is not defined命名函数表达式的名字只在该函数的作用域内部有效。

再来看看下面例子:

以上代码很显然会输出 "my global var",但是如果我们把以上代码按如下方式稍加修改:

执行结果是输出了一个 undefined,出现这个结果的原因就是变量的声明被提升了,以上代码等同如下:

被提升的仅仅是变量的声明部分,并没有立即初始化,所以会输出 undefined。

然而这种提升机制,不仅仅表现于在普通的变量,同时也表现在函数上。例如下面这段代码并不能被正确执行:

因为它等价于:

因为函数的声明同样被提升而没有立即初始化,所以会出错。

当然,这种定义函数的方式称之为“函数表达式”,会有提升机制,如果是如下的这种“函数声明”方式,则完全没有提升机制方面的问题:

这也是函数声明与函数表达式的主要区别。

详细解读JavaScript的跨浏览器事件处理 一.关于获取事件对象FF有点倔强,只支持arguments[0],不支持window.event。这次真的不怪IE,虽然把event作为window的属性不合规范,但大家都已经默许这个小

JavaScript中的call方法和apply方法使用对比 方法定义call方法:语法:call([thisObj[,arg1[,arg2[,[,.argN]]]]])定义:调用一个对象的一个方法,以另一个对象替换当前对象。说明:call方法可以用来代替另一

深入学习JavaScript中的原型prototype javascript是一种prototypebasedprogramming的语言,而与我们通常的classbasedprogramming有很大的区别,我列举重要的几点如下:1.函数是firstclassobject,也就是说函数与对

标签: 深入解读2023年一号文件

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

上一篇:浅谈JavaScript中setInterval和setTimeout的使用问题(javascriptz)

下一篇:基于KMP算法JavaScript的实现方法分析(kmp算法代码完整实现)

  • 退回的所得税与增值税的财务处理?
  • 计提工资是计提哪个月的
  • 开的税票必须过期怎么办
  • 盘亏的设备按正常报废处理是否符合会计制度要求
  • 有限合伙企业应当
  • 发票上盖财务章吗
  • 外购生物资产的成本不包括
  • 政府搬迁补偿款记资本公积
  • 房贷利息抵个税细则 两套房
  • 个人转让商铺个人所得税核定征收
  • 已经给员工交了社保能退吗
  • 免税和应税无法划分
  • 个人销售货物缴纳增值税吗
  • 劳务派遣案例分析题
  • 购车税务发票
  • 滞留发票产生的原因主要包括哪些?
  • 应对税务稽查的六点注意事项
  • 企业范围内已利用的荒山要交城镇土地使用税吗
  • 公司购买的商品给别的企业用了,企业所得税能列支吗
  • 土地出让金缴纳契税计税依据
  • 金三接口调用失败怎么办?
  • 社保显示已申报,但缴不了款
  • win10专业版虚拟内存怎么设置
  • win 11 中文
  • 如何在Excel中合并计算
  • 待抵扣的进项税因不能抵扣做转出的会计处理
  • 人工费没有发票年度汇算调增需要进行调帐处理吗
  • bios 怎么进去
  • php date_diff
  • word的拼写检查总是变成法语
  • 固定资产改扩建账务处理
  • 其他应付款转营业外收入需要交增值税吗
  • Win10 KB5004476 可选更新 解决XGP游戏无法安装的问题
  • 企业所得税会计利润
  • win10 1909无法连接到这个网络
  • 销售收入与销售成本
  • 学生兼职收入按什么交个税
  • pytorch入门教程(非常详细)
  • nginx反向代理详解
  • php搜索框查询数据库
  • 基于stm32的毕业设计
  • 真题解析买谁的
  • 小程序官方组件展示
  • thinkphp百万级数据查询
  • 福利费计入科目
  • 当月已入账可是未入账
  • 固定资产的入账标准
  • 建筑劳保费返还政策
  • 小微企业具体指
  • 公司租赁员工电脑怎么办
  • 待处理财产损溢借方是增还是减
  • 购买备用品会计分录
  • vue连接webapi
  • 国税实名认证手机号如何解绑
  • 厂区道路折旧年限最新规定
  • 工资税预扣
  • 企业接受捐赠增值税处理
  • 增值税纳税申报类型有哪些
  • 没有发票的运输费用怎么入账
  • 关于小规模纳税人的说法正确的是
  • 收客户货款怎么说话
  • 超过诉讼时效的法律后果
  • 劳务支出如何做账
  • 资本增值率计算公式是什么?
  • MySQL数据迁移到oracle
  • Linux系统中uniq命令的基本使用教程
  • docker mysql 数据存储容器目录
  • windows7怎么添加设备
  • centos7怎么看cpu和内存
  • mac如何开启屏幕录制权限
  • executor进程
  • win8.1无法安装vmware tools
  • win7回收站图标在哪个文件夹
  • python tkinter tabview
  • javascript高级程序设计第三版
  • service与activity数据交互
  • 安卓手机管家是什么
  • 个体经营所得申报密码怎样设置
  • 污水处理费收入
  • 税务投诉电话12345
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设