网站首页 » 前端开发 » JavaScript » JavaScipt 中函数声明与函数表达式的区别
上一篇:
下一篇:

JavaScipt 中函数声明与函数表达式的区别

在 JavaScript 中函数可以说是无处不在,没有了它,在 JavaScript 的世界里你就寸步难行,心有余而力不足。但在这篇文章里,我们不对函数作过多的分享,而是来看看 JavaScipt 中函数声明与函数表达式之间有什么区别。虽然这是一个很小的点,那是知道了有这么一回事,在以后的开发中你很有可能会快人一点。

要想知道它们之间的区别,我们只需要来看看两段代码就可以了:

函数声明
runDeclaration();
function runDeclaration(){
    console.log("我是函数声明");
}

这段代码功能打印出“我是函数声明”

函数表达式
runExpression();
var runExpression = function(){
    console.log("我是函数表达式");
};

这段代码则给你报错了。

错误提示

Uncaught TypeError: runExpression is not a function

这是为什么呢?

大家都知道 JavaScript 引擎会对代码进行两步操作:1、解析;2、执行。

解析阶段

就是先把代码中的变量、函数等先进行解析放到内存中,这些工作都做完以后才会开始执行代码。在解析代码时当 JavaScript 解析器遇到变量声明时,会先把这个变量放到内存中,但JavaScript 解析器会忽略变量等号后面的赋值,也就是说,解析器第一遍只是对变量名进行处理。而当解析器遇到函数声明时,就会把这个函数声明放到内存中。

运行阶段

完成代码解析后,JavaScript 解析器就是从上往下一行一行地执行代码。所以当我们在函数声明之前调用这个函数是可以成功调用的,因为在执行环境中已经存在这个函数了。但是对于函数表达式而言就有点不一样了。由于在解析阶段只是声明了一个变量 runExpression (函数名),变量的赋值还没有进行,因为这个赋值是在代码执行阶段进行的。所以当你在函数表达之前调用这个方法就会报错。不信你可以把这个变量打印出来,它的值就是 undefined 。

不信看这里
console.log(runExpression); // undefined
var runExpression = function(){
    console.log("我是函数表达式");
};

所以如果你使用了函数表达式的方式来定义函数,那么你就必要在函数表达式之后调用它,函数声明就没有这个问题。声明前声明后调用都可以。

这篇文章浓缩成一句话就是:“函数声明调用不分先后,函数表达式定义在前,调用在后”。不难看出,函数声明用起来比函数表达式方式一些,也可以避免一些不必要的错误。所以你没有理由不选用函数声明来为你代步。

  • 微信扫一扫,赏我

  • 支付宝扫一扫,赏我

声明

原创文章,不经本站同意,不得以任何形式转载,如有不便,请多多包涵!

本文永久链接:http://yunkus.com/difference-between-function-declaration-and-function-expression/

发表评论

电子邮件地址不会被公开。 必填项已用*标注

评论 END