位置: 编程技术 - 正文

浅析函数声明和函数表达式——函数声明的声明提前(函数里面声明函数)

编辑:rootadmin

推荐整理分享浅析函数声明和函数表达式——函数声明的声明提前(函数里面声明函数),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:函数声明和函数定义的作用,函数声明的作用,函数声明的作用,浅析函数声明和定义,函数声明和函数定义的作用,函数声明的形式,浅析函数声明和定义,浅析函数声明和定义,内容如对您有帮助,希望把文章链接给更多的朋友!

前两天班级聚会,除了吃喝玩乐就是睡觉扯淡,甚是喜悦,真是独乐乐不如众乐乐啊。

PS:毕业的或即将毕业的有时间能聚就聚吧,毕了业以后属于自己的时间能聚到一块儿可就少太多了。

现在有点时间来看点东西总结些东西了,又因为前段时间片片断断地看了看JavaScript的函数部分,所以抽时间总结下函数的相关部分,当然,里面有些部分都是自己的理解,如果有理解的不对的地方还请小伙伴们不吝指出。

这一节我结合自己的理解和小伙伴们聊一下函数声明的声明提前。

注:有的地方也叫函数声明提升。翻译的不一样,意思一样,大家理解就行。理解万岁!

在聊函数声明的声明提前之前,有必要介绍下函数定义的几种方法,大部分小伙伴们应该都不陌生。了解的或者不想了解的就痛快地一滚轮滚下去吧,不熟悉的或者想再熟悉一下的就放慢脚步起步走。

定义函数的方法

定义函数的方法主要有三种:

1.函数声明(Function Declaration)2.函数表达式Function Expression)3.new Function构造函数其中,经常使用的是函数声明和函数表达式的函数定义方法,这两种方法有着很微妙的区别和联系,而且这两种方法的使用也容易混淆,所以这篇文章主要总结下这两种函数定义方法的相关知识点,当然本文的主题依然是关于函数提前的。

函数声明的典型格式:

函数表达式

&#;函数表达式的典型格式:

包含名称(括弧,函数名)的函数表达式:

像上面的带有名称的函数表达式可以用来递归:

声明提前

var声明提前

小伙伴们应该都听说过声明提前的说法,我想在此再次重申一遍,因为声明提前是函数声明和函数表达式的一个重要区别,对于我们进一步理解这两种函数定义方法有着重要的意义。

但是再说函数声明提前之前呢,有必要说一下var声明提前。

先给出var声明提前的结论:

变量在声明它们的脚本或函数中都是有定义的,变量声明语句会被提前到脚本或函数的顶部。但是,变量初始化的操作还是在原来var语句的位置执行,在声明语句之前变量的值是undefined。

上面的结论中可以总结出三个简单的点:

1.变量声明会提前到函数的顶部;2.只是声明被提前,初始化不提前,初始化还在原来初始化的位置进行初始化;3.在声明之前变量的值是undefined。

还是来例子实在:

正确的输出结果是:先输出undefined,然后输出ugly。

错误的输出结果是:先输出handsome,然后输出ugly。

这里正是变量声明提前起到的作用。该handsome局部变量在整个函数体内都是有定义的,在函数体内的handsome变量压住了,哦不对,是覆盖住了同名的handsome全局变量,因为变量声明提前,即var handsome被提前至函数的顶部,就是这个样子:

所以说在alert(handsome)之前,已经有了var handsome声明,由上面提到的

在声明之前变量的值是undefined所以第一个输出undefined。

浅析函数声明和函数表达式——函数声明的声明提前(函数里面声明函数)

又因为上面提到的:

只是声明被提前,初始化不提前,初始化还在原来初始化的位置进行初始化所以第二个输出ugly。

函数声明提前接下俩我们结合var声明提前开始聊函数声明的声明提前。

函数声明的声明提前小伙伴们应该很熟悉,举个再熟悉不过的例子。

小伙伴们都知道,对于函数声明的函数定义方法,即上面的第一种函数调用方法是正确的,可以输出myvin is handsome.的真理,因为函数调用语句可以放在函数声明之后。而对于函数表达式的函数定义方法,即上面的第二种函数调用的方法是不能输出myvin is handsome.的正确结果的。

结合上面的myvin is handsome.例子,函数声明提前的结论似乎很好理解,不就是在使用函数声明的函数定义方法的时候,函数调用可以放在任意位置嘛。对啊,你说的很对啊,小伙伴,我都不知道怎么反驳你了。那就容我再扯几句。

从小伙伴所说的

不就是在使用函数声明的函数定义方法的时候,函数调用可以放在任意位置嘛可以引出一点:

函数声明提前的时候,函数声明和函数体均提前了。

而且:

函数声明是在预执行期执行的,就是说函数声明是在浏览器准备执行代码的时候执行的。因为函数声明在预执行期被执行,所以到了执行期,函数声明就不再执行(人家都执行过了自然就不再执行了)。

上面是一点。

函数表达式为什么不能声明提前我们再说一点:为什么函数表达式不能像函数声明那样进行函数声明提前呢?

辛亏我知道一点儿,否则真不知道我该怎么回答呢?

咳咳,按照我的理解给小伙伴们解释一下下:

我们上面说了var的声明提前,注意我上面提过的:

只是声明被提前,初始化不提前,初始化还在原来初始化的位置进行初始化

Ok,我们把函数表达式摆在这看看:

函数表达式就是把函数定义的方式写成表达式的方式(貌似是白说,但是这对于解释和理解为毛函数表达式不能函数声明提前具有良好的疗效),就是把一个函数对象赋值给一个变量,所以我们把函数表达式写成这个样子:

var varible=5看到这,也许小伙伴们会明白了,一个是把一个值赋值给一个变量,一个是把函数对象赋值给一个变量,所以对于函数表达式,变量赋值是不会提前的,即function(arg1, arg2, ...){<!-- function body -->}是不会提前的,所以函数定义并没有被执行,所以函数表达式不能像函数声明那样进行函数声明提前。

函数声明提前的实例分析

还是那句话,还是例子来的实在:

在浏览器不抛出错误的情况下(请自行测试相应的浏览器是否有抛出错误的情况,为啥我不测试?我能说我懒么。。。),浏览器的输出结果是输出myvin is ugly(我不愿承认,但是事实就是这样啊啊啊啊,难道道出了人丑就该多读书??????)。

为什么呢?当然是声明提前了。因为函数声明提前,所以函数声明会在代码执行前进行解析,执行顺序是这样的,先解析function sayTruth(){alert('myvin is handsome')},在解析function sayTruth(){alert('myvin is ugly')},覆盖了前面的函数声明,当我们调用sayTruth()函数的时候,也就是到了代码执行期间,声明会被忽略,所以自然会输出myvin is ugly(好残酷的现实。。。)。忘了的可以看上面说过的:

函数声明是在预执行期执行的,就是说函数声明是在浏览器准备执行代码的时候执行的。因为函数声明在预执行期被执行,所以到了执行期,函数声明就不再执行了(人家都执行过了自然就不再执行了)。

小了个结

关于函数声明的函数提前(提升)就聊到这里先,希望我的理解和扯淡能够对有需要的小伙伴有所帮助。

当然,实践出真知。对事物的了解、认知和运用还是在于多看多用多总结,记得有句名言,是讲声明和实践的:“动起来,为新的声明喝彩。”。

以上这篇浅析函数声明和函数表达式——函数声明的声明提前就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持积木网。

总结JavaScript三种数据存储方式之间的区别 sessionStorage、localStorage和cookie之间的共同点:都是保存在浏览器端,且同源的。sessionStorage、localStorage和cookie之间的区别:cookie数据始终在同源的http请求

学JavaScript七大注意事项【必看】 知识说明:初学JavaScript,注意以下七大细节,在实现同样功能的情况下,让我们的代码更易懂、效率更高。一、简化代码例如:创建对象之前是这样的

图文详解Heap Sort堆排序算法及JavaScript的代码实现 1.不得不说说二叉树要了解堆首先得了解一下二叉树,在计算机科学中,二叉树是每个节点最多有两个子树的树结构。通常子树被称作左子树(leftsubtree

标签: 函数里面声明函数

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

上一篇:聊一聊JavaScript作用域和作用域链(小郭聊一聊)

下一篇:总结JavaScript三种数据存储方式之间的区别(javascript的三种主要数据类型)

  • 会计上已资本化处理的工资企业所得税前应如何扣除?
  • 当月红冲发票账务怎么处理
  • 一般纳税人租赁费税率5%是简易征收吗?
  • 可供出售债权投资
  • 奖金个人所得税筹划
  • 租赁厂房发生的改造装修费用
  • 出口免税什么意思
  • 最新契税优惠政策公告财政部
  • 季度所得税报表季初资产总额怎么填
  • 哪些情况下,企业需要进行分销渠道设计决策
  • 电子承兑到期收款怎么做账务
  • 企业进项税和销项税抵扣政策
  • 完工百分比法确认成本 分录
  • 发票已认证开票方未报税要怎么作废?
  • 买办公用品花了100元如何做会计分录
  • 红冲发票后 库存怎么处理
  • 结转固定资产净收益8万元
  • 开票金额比收入高怎么办
  • 小企业成本核算方法移动加权平均法
  • 以太网连接网络
  • 谷歌浏览器adobe flash player已不再支持
  • Win10 Build 19043(21H1最新版)即将推送 更新内容汇总
  • 销售利润率的计算公式Excel
  • 修改系统帐户用什么软件
  • 如何在windows中添加输入法
  • 电脑任务栏在右边怎么调回下边
  • gradle视频教程
  • 接受捐赠的固定资产可以入账依据是哪些?
  • 硬盘跳线设置
  • apache去掉php后缀
  • 待抵扣进项税额什么意思
  • 社保缴费基数如何调整
  • php怎么添加背景图片
  • thinkphp删除文件
  • php similar_text()函数的定义和用法
  • adas数据集
  • 【C#+JavaScript+SQL Server】实现Web端考试系统 六:后台管理模块设计(附源码和资源)
  • HTML常用的表单控件有哪些
  • c#怎么使用
  • 填写发票票种核实怎么填
  • 进项税额在借方是增加还是减少
  • 差旅费补贴要交个人所得税文件
  • 列入固定资产的金额标准
  • ps怎么怎么用
  • mongodbwin7能安装么
  • 减免所得税额怎么做分录
  • 定期定额户超过9万如何交个税
  • 支付贷款手续费怎么入账
  • 网络服务费计入什么费用
  • 蓝字发票作废流程视频
  • 社保局退回来的社保怎么入账
  • 登记现金日记账收入栏的依据有
  • 工程年底结账
  • 食品企业生产成本管理的案例分析
  • mysql8 存储引擎
  • mysql搜索字段内容
  • mysql单表数据建议
  • 新疆喀什地区身份证号码开头
  • mac怎么用知云翻译
  • vmware10虚拟机安装
  • Linux系统启动文件在哪个文件
  • win10系统打开word出现水渍
  • windows8联网
  • 三种方法完美解决问题
  • win10 mobile 1709
  • 在win7系统中如何进行宽带连接
  • win10账户登录闪退
  • win10系统怎么关闭病毒防护
  • win10局域网无法上网
  • Expand、Fasthelp、Fc命令的用法
  • bash linux命令
  • 显示网络配置的命令
  • Python装饰器实现几类验证功能做法实例
  • python基本用法
  • 细说javascript
  • bootstrap需要学多久
  • 税控发票开票软件密码怎么修改?
  • 浙江公务员冬令时上班时间
  • 医保可以直接到税局买吗?
  • 收到的短信内容是什么
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设