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 三级关联菜单效果实例

    js 三级关联菜单效果实例

    这篇文章介绍了js 三级关联菜单效果,有需要的朋友可以参考一下
    2013-08-08
  • JavaScript实现数组在指定位置插入若干元素的方法

    JavaScript实现数组在指定位置插入若干元素的方法

    这篇文章主要介绍了JavaScript实现数组在指定位置插入若干元素的方法,涉及javascript中splice方法的使用技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • fw.qq.com/ipaddress已失效 javascript获得客户端IP的新方法

    fw.qq.com/ipaddress已失效 javascript获得客户端IP的新方法

    一直以来,我都是通过http://fw.qq.com/ipaddress来获得客户端用户的IP,这个方法简单、快速、实用
    2012-01-01
  • JS Array对象入门分析

    JS Array对象入门分析

    每天一对象,今天我们也来new一个。没有系统的学过JS,没有特别的写过一个比较出色的类库,没有运用过一个很强的类库,prototype.js在进行着,慢慢的前进相信不久的将来就可以应用prototype.js来开发自己的应用程序了。
    2008-10-10
  • javascript replace()用法详解附实例代码

    javascript replace()用法详解附实例代码

    在javascript中,String的函数replace()简直太让人喜爱了。它灵活而强大的字符替换处理能力,让我不禁想向大家介绍它。
    2008-10-10
  • 关于Ajax的原理以及代码封装详解

    关于Ajax的原理以及代码封装详解

    AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML),相信大家对ajax都很熟悉,下面这篇文章主要给大家介绍了关于Ajax原理以及代码封装的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-09-09
  • 浅谈javascript原型链与继承

    浅谈javascript原型链与继承

    这篇文章主要介绍了浅谈javascript原型链与继承的相关资料,需要的朋友可以参考下
    2015-07-07
  • 用webAPI实现图片放大镜效果

    用webAPI实现图片放大镜效果

    这篇文章主要为大家详细介绍了用webAPI实现图片放大镜效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • JavaScript实现鼠标拖拽调整div大小

    JavaScript实现鼠标拖拽调整div大小

    这篇文章主要为大家详细介绍了JavaScript实现鼠标拖拽调整div大小,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-03-03
  • javascript this用法小结

    javascript this用法小结

    this是JavaScript中功能最强大的关键字之一。不幸的是,如果你不知道它具体怎么工作,你将很难正确使用它。
    2008-12-12

最新评论