博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Javascript中的函数声明与函数表达式
阅读量:7055 次
发布时间:2019-06-28

本文共 799 字,大约阅读时间需要 2 分钟。

两个简单的例子

  1. 请思考下面两段代码的输出结果
add() // 0    function add () {      return '函数声明'    }复制代码
add () // add is not a function    var add = function () {        return '函数表达式'    }复制代码

以上两个例子中,第一段代码中函数声明式add存在变量提升,实际上的执行顺序为:

var add add()   function add () {     return '函数声明'   }复制代码

很好奇的是为什么同样都是函数,第二段函数表达式中似乎没有进行函数变量提升,再看一个例子:

var add = function () {    return 1  }  add() // 1复制代码

实际上,函数表达式定义后,并不会进行变量提升,只是会在执行的时候运行,所以才会出现此种情况。

  1. 再来看一段代码
var add = function () {   return 0 } function add () {   return 1 } add() // 0复制代码

这里实际上也是存在变量提升的,只不过是两种类型的提升,一种是var变量提升,一种是function提升,在运行之前,会提前生成执行上下文,执行上下文解析的规则则是:function早于var被提升,所以上例就很好理解了,是因为变量add覆盖了函数add。

总结了以下几点:

  • 在执行上下文中存在变量提升,变量提升又分为普通变量提升与function提升,function早于其他普通变量;
  • 函数表达式 定义的函数不存在变量提升,只会在执行的时候运行。函数声明才存在变量声明。

转载于:https://juejin.im/post/5cf61bddf265da1b7b31770c

你可能感兴趣的文章
ILOG Gantt 3.0 注册机
查看>>
自己实现几个基本函数
查看>>
谨防沦为DLL后门木马及其变种的肉鸡
查看>>
C#构造函数的重载
查看>>
Silverlight4.0教程之轻松操作剪切板
查看>>
GIF, JPEG和PNG
查看>>
线控的原理
查看>>
Android : Must Override a Superclass Method
查看>>
24款最好的jQuery日期时间选择器插件
查看>>
记2016腾讯 TST 校招面试经历,电面、笔试写代码、技术面、hr面,共5轮
查看>>
我是一个线程(转)
查看>>
MS access 数据定时导入MS SQL Server
查看>>
php 生成8位数唯一的激活码
查看>>
微信公众平台完整开发教程【转】
查看>>
初学JDBC,最简单示例
查看>>
strftime 日期时间格式化
查看>>
exe4j的使用
查看>>
Java单链表、双端链表、有序链表实现
查看>>
hadoop配置
查看>>
031 分布式中,zookeeper的部署
查看>>