`

JavaScript声明函数的方式,以及各个方式的区别

阅读更多
函数声明方式


1.函数声明方式
其语法为:
function 函数名(参数1,参数2,...){
    //要执行的语句
}

例1:
function sum(num1,num2){
    return num1+num2;
}

2.函数表达式方式
其语法为:
var 函数名 = function(参数1,参数2,...){
                //要执行的语句
            };

例2:
var sum = function(num1,num2){
    return num1+num2;
};


        例2定义了一个变量并将其初始化为一个函数。function关键字后面没有函数名,这是因为在使用函数表达式定义函数时,没有必要使用函数名——通过变量sum即可引用函数。另外就像声明其他变量一样,使用函数表达式定义函数时,函数体外有分号。
3.使用Function构造函数

        Function构造函数可以接收任意数量的参数,最后一个参数为函数体,其他的参数则枚举出新函数的参数。其语法为:
var 变量名 = new Function("参数1","参数2",...,"参数n","函数体");

例3:
var sum = new Function("num1","num2","return num1+num2");


各种定义函数方式的区别

        从技术角度上讲,使用Function构造函数定义函数的方式是一个函数表达式,但是不推荐使用这种方式定义函数,原因在于这种方式会导致解析两次代码,影响性能。第一次解析常规的JavaScript代码,第二次解析传入构造函数的字符串。不过,这种语法对于理解“函数是对象,函数名是指针”的概念是非常直观的。

        对于函数声明和函数表达式两种定义函数的方式而言,解析器并不是一视同仁的。解析器会率先读取函数声明,并使其在执行任何代码之前可用(可以访问);对于函数表达式,则必须等到解析器执行到它所在的代码行,才会真正被解释执行。直接上例子吧。。。
例4
alert(sum(10,10));//20

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


        例4的运行结果为20。为什么呢?因为在代码开始执行之前,解析器就已经通过一个名为函数声明提升(function declaration hoisting)的过程,读取并将函数声明添加到执行环境中。对于代码求值时,js引擎在第一遍会声明函数并将它们放到源代码树的顶部。所以,即使声明函数在调用它的代码后,js引擎也能把函数声明提升到顶部。但是,如果把上面的函数声明改成等价的函数表达式,就会在执行期间导致错误。
例5
alert(sum(10,10));//20

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


        例5会运行错误,因为函数位于一个初始化语句中,而不是一个函数声明。换句话说,在执行到函数所在的语句之前,变量sum中不会保存有对函数的引用;而且,第一行代码运行不通过,实际上也不会执行到下一行
分享到:
评论
2 楼 gaojiehigh 2013-06-19  
zhr85210078 写道
谢谢普及基础知识~~~

不客气,大家一起学习。。。
1 楼 zhr85210078 2013-06-18  
谢谢普及基础知识~~~

相关推荐

    微软JavaScript手册

    function 语句 声明一个新的函数。 getDate 方法 使用当地时间返回 Date 对象的月份日期值。 getDay 方法 使用当地时间返回 Date 对象的星期几。 getFullYear 方法 使用当地时间返回 Date 对象的年份。 getHours...

    JavaScript笔记

    12.Array笔试题:js中数组声明方式: A new Array(7) B new Array(7,‘a’,true) C [7,'a',true]--js中所有[]都表示数组 D []--实例化一个空数组对象 实例化空数组:var arr=[]; 特点:元素个数不限定,元素...

    javascript文档

    function 语句 声明一个新的函数。 getDate 方法 使用当地时间返回 Date 对象的月份日期值。 getDay 方法 使用当地时间返回 Date 对象的星期几。 getFullYear 方法 使用当地时间返回 Date 对象的年份。 getHours...

    wrapi:将Restful API包装为可调用函数

    使用wrapi您可以像普通JavaScript函数一样对基于HTTP的API进行调用。 安装 $ npm install wrapi --save 或者 $ yarn add wrapi 轻松启动 创建一个列出要使用的所有API端点。 用wrapi端点。 将各个端点称为。 ...

    js-boilerplate:这是我大多数基于Javascript的应用程序的基本样板

    Backbone('Backbone.js通过提供具有键-值绑定和自定义事件的模型,具有丰富的可枚举函数的API,具有声明性事件处理的视图的集合,并通过RESTful JSON将其全部连接到现有API来为Web应用程序提供结构界面。...

    code2flow:将您的Python和Javascript代码转换成DOT流程图

    从2021年4月开始的更新我已经与...code2flow 将您的Python和Javascript源代码转换为DOT流程图Code2flow将遍历您的项目源代码以查找函数定义。 然后它将进行另一次扫描,以查找在何处调用这些函数。 Code2flow连接各个

    DWR.xml配置文件说明书(含源码)

    Creator可以配置类的成员函数的访问权限.creator有授权访问(指明可以被访问的方法)和拒绝访问(指明不允许访问的方法)两种配置方式. 如果要设置除了setWibble方法之外的所有方法都不可访问可以采用下面的设置. ...

    微信小程序如何使用globalData的方法

    微信小程序在JavaScript文件中声明的变量和函数只在该文件中有效;不同的文件中可以声明相同名字的变量和函数,不会互相影响。如果希望在各个页面之间共同使用某些信息,并且可以对共享数据进行修改设置,以便于其他...

    ARCH4系统开发指南

    2.11.3 主页面用${ctx}方式,引入frame中包含的各个页面。 23 2.12 如何处理代码双击域 24 2.12.1 普通的代码双击域 24 2.12.2 多行输入域中的代码双击域 26 2.12.3 代码双击域的后台处理 27 2.12.4 代码双击域的...

    千方百计笔试题大全

    2、作用域public,private,protected,以及不写时的区别? 8 3、String 是最基本的数据类型吗? 8 4、float 型float f=3.4是否正确? 8 5、语句float f=1.3;编译能否通过? 8 6、short s1 = 1; s1 = s1 + 1;有什么错? 8...

    java面试宝典

    2、作用域public,private,protected,以及不写时的区别? 8 3、String 是最基本的数据类型吗? 8 4、float 型float f=3.4是否正确? 8 5、语句float f=1.3;编译能否通过? 8 6、short s1 = 1; s1 = s1 + 1;有什么错? 8...

    requireJS使用指南

    AMD:一种基于模块的异步加载JavaScript代码的机制,它推荐开发人员将JavaScript代码封装进一个个模块,对全局对象的依赖变成了对其他模块的依赖,无须再声明一大堆的全局变量。通过延迟和按需加载来解决各个模块的...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    Chrome Frame 会把最新版的Chrome Webkit 内核和JavaScript 引擎注入到IE中, IE浏览器将获得Chrome的性能和功能 目录 摘要 I ABSTRACT II 专业名词清单 III 第一章 绪论 1 1.1 研究背景与意义 1 1.2国内外相关...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

    实例051 前置运算符和后置运算符的区别 82 实例052 使用位运算对数字进行加密和解密 83 2.3 包含语句 84 实例053 提高代码重用率 84 实例054 包含数据库连接文件 85 实例055 包含网站头文件 86 实例056 包含网站尾...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part2

    实例051 前置运算符和后置运算符的区别 82 实例052 使用位运算对数字进行加密和解密 83 2.3 包含语句 84 实例053 提高代码重用率 84 实例054 包含数据库连接文件 85 实例055 包含网站头文件 86 实例056 包含网站尾...

    Ajax.Dll各个版本无刷新组件

    应用篇,这以下的东西会借鉴网上其他人的文章,在这里声明一下 1.先把Ajax.dll添加引用到项目中,别告诉我不会,如果连这个也不会就太那个了,和添加其他DLL一样,在项目上右击,菜单上有个[添加引用],然后一步...

    C程序设计语言(第2版·新版中文)

    公司简介|招贤纳士|广告服务|银行汇款帐号|联系方式|版权声明|法律顾问|问题报告北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号世纪乐知(北京)网络技术有限公司 提供技术支持江苏乐知网络技术有限公司 ...

    lowercase_v:速记矢量库

    目录介绍v()构造函数m()构造函数关于就地方法关于参数格式学分单击“片段”文件夹,以获取更多自述文件,详细介绍该项目的各个部分v(...) v()返回扩展Float32Array的对象。 传递单个数字将返回该维度的零...

    vcg(验证码控件)

    提供简单易用的设计时所见即所得的可视化设置方式,并且支持设计时验证码图像效果与特效属性设置的实时联动体现,极大地提高程序员的工作效率; 2. 对验证码图像的包括残影、打散、风化、旋转、斜变等多种图形...

    正则表达式30分钟入门教程

    之所以要给出这个例子是因为它能说明一个问题:使用分枝条件时,要注意各个条件的顺序。如果你把它改成\d{5}|\d{5}-\d{4}的话,那么就只会匹配5位的邮编(以及9位邮编的前5位)。原因是匹配分枝条件时,将会从左到右地...

Global site tag (gtag.js) - Google Analytics