js中函数声明与函数表达式

 更新时间:2015年06月03日 11:09:59   投稿:hebedich  
js的解析器对函数声明与函数表达式并不是一视同仁地对待的。对于函数声明,js解析器会优先读取,确保在所有代码执行之前声明已经被解析,而函数表达式,如同定义其它基本类型的变量一样,只在执行到某一句时也会对其进行解析,

目前为止,我们一直没有对函数声明和函数表达式加以区别。而实际上,解析器在向执行环境中加载数据时,对函数声明和函数表达式并非一视同仁。解析器会率先读取函数声明,并使其在执行任何代码之前可用(可以访问);至于函数表达式,则必须等到解析器执行到它所在的代码行,才会真正被解释执行。如下例子:

复制代码 代码如下:

alert(sum(10,10));
function sum(num1,num2)
{
    return num1+num2;
}

  以上代码完全可以正确执行,因为在代码开始执行之前,解析器就已经通过一个名为函数声明提升(function declaration hoisting)的过程,读取并将函数声明添加到执行环境中。对代码求值时,JavaScript引擎在第一遍会声明函数并将它们放到源代码树的顶部。所以,即使声明函数的代码在调用它的代码后面,JavaScript引擎也能把函数声明提升到顶部。如果像下面的例子所示,把上面的函数声明改为等价的函数表达式,就会在执行的时候出现错误。

复制代码 代码如下:

alert(sum(10,10));
var sum=function(num1,num2)
{
    return num1+num2;
};

  以上代码会在运行的时候出现错误,原因在于函数位于一个初始化语句中,而不是一个函数声明。换句话讲,在执行到函数所在的语句之前,变量sum中不会保存有对函数的引用;而且,由于第一行代码就会导致“unexpected identifier”(意外标识符)错误,实际上也不会执行到下一行。

  除了声明时候可以通过变量访问函数这一点区别之外,函数声明与函数表达式的语法其实是等价的。

  注:也可以同时调用函数声明和函数表达式,例如 var sum=function sum(){}。不过,这种语法在Safari中会导致错误。

以上所述就是本文的全部内容了,希望对大家学习javascript能够有所帮助。

相关文章

  • JS中sort函数排序用法实例分析

    JS中sort函数排序用法实例分析

    这篇文章主要介绍了JS中sort函数排序用法,结合实例形式详细分析了sort函数的功能、原理及实现数组排序的相关技巧,代码中备有详尽的注释便于理解,需要的朋友可以参考下
    2016-06-06
  • 浅谈JavaScript中指针和地址

    浅谈JavaScript中指针和地址

    Javascript是一门基于对象的动态语言,也就是说,所有东西都是对象,一个很典型的例子就是函数也被视为普通的对象。Javascript可以通过一定的设计模式来实现面向对象的编程,其中this指针就是实现面向对象的一个很重要的特性。
    2015-07-07
  • javascript实现自由编辑图片代码详解

    javascript实现自由编辑图片代码详解

    这篇文章主要介绍了javascript实现自由编辑图片代码详解,在当下的的前端项目中,图片功能可以说是非常常见的,图片的展示、图片的裁剪编辑、图片的上传等,那么我们的项目便来了个需求。,需要的朋友可以参考下
    2019-06-06
  • 分享一道笔试题[有n个直线最多可以把一个平面分成多少个部分]

    分享一道笔试题[有n个直线最多可以把一个平面分成多少个部分]

    今天地铁上和一个同事闲聊,给我说的一道题,回来想了想,写出来的,说来惭愧,我用的是行测方面数字推理里面的知识归纳出来的,当然这个可以用递归写出来,说说我的代码,以及递归的思路
    2012-10-10
  • javascript自定义in_array()函数实现方法

    javascript自定义in_array()函数实现方法

    这篇文章主要介绍了javascript自定义in_array()函数实现方法,涉及javascript数组的遍历与查找相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-08-08
  • JS实现iframe自适应高度的方法(兼容IE与FireFox)

    JS实现iframe自适应高度的方法(兼容IE与FireFox)

    这篇文章主要介绍了JS实现iframe自适应高度的方法,涉及javascript与iframe交互动态操作页面元素属性的相关技巧,需要的朋友可以参考下
    2016-06-06
  • 将查询条件的input、select清空

    将查询条件的input、select清空

    查询条件清空将input、select的值清空,下面有个不错的示例,需要的朋友可以了解下
    2014-01-01
  • 显示js对象所有属性和方法的函数

    显示js对象所有属性和方法的函数

    显示js对象所有属性和方法,从网上整理了不少,大家可以看下原理都是差不多的。
    2009-10-10
  • javascript实现平滑无缝滚动

    javascript实现平滑无缝滚动

    这篇文章主要为大家详细介绍了javascript实现平滑无缝滚动的具体代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • javascript AOP 实现ajax回调函数使用比较方便

    javascript AOP 实现ajax回调函数使用比较方便

    javascript AOP 实现ajax回调函数使用比较方便,需要的朋友可以参考下。
    2010-11-11

最新评论