《深入理解JavaScript》——1.10 函数

1.10 函数

可以通过函数声明的方式来定义函数:

  

上面的代码定义了函数add,它有两个参数:param1和param2,返回值是这两个参数的和。可以这样去调用这个函数:

  

除此之外,我们还可以通过给变量add赋值为函数表达式的方式来定义add函数:

 

函数表达式会产生一个值,因此可以将函数作为参数直接传递给另外的函数:

  

1.10.1 函数声明的提升特性
函数声明具有提升特性——它们的实体会被移动到所在作用域的开始处。这使得我们可以引用后面声明的函数。

 

注意,var声明也具有提升的特性(参见1.13.2“变量的提升特性”),但通过它们执行的赋值却不具备该特性:

 

1.10.2 特殊的变量arguments
在JavaScript中,函数的所有参数都可以被自由调用,它会通过arguments变量来使所有参数可用。arguments看起来像个数组,但却不具备数组的方法:

 

1.10.3 参数太多或太少
我们可以通过以下函数来探知,在JavaScript中,函数参数太多或太少是如何处理的(toArray()函数会在1.10.6“将arguments转换为数组”中出现):

  

额外的参数会被忽略(arguments除外):

  .

丢失的参数会得到undefined这个值:

  

1.10.4 可选参数
以下是一个给参数赋上默认值的通用模式:

 

在标记了(1)的这行,||运算符会在x为真值的时候(非null、undefined等值)返回x,否则,会返回第二个运算数:

  

**1.10.5 强制参数长度
**如果想强制一个参数长度(指定的参数长度),可以通过arguments.length来检查:

1.10.6 将arguments转换为数组
arguments不是数组,它只是类似于数组(参见17.15.3“类似数组的对象和泛型方法”)。它有length属性,可以通过方括号去访问它的元素。不能移除它的元素,也不能对它调用数组的方法。因此,有时候会需要将它转换成数组,方法如以下函数所示(在17.15.3“类似数组的对象和泛型方法”中会有详细介绍):

  

时间: 2024-09-13 05:25:03

《深入理解JavaScript》——1.10 函数的相关文章

深入理解JavaScript内置函数_基础知识

javascript函数一共可分为五类: · 常规函数 · 数组函数 · 日期函数 · 数学函数 · 字符串函数 1.常规函数 javascript常规函数包括以下9个函数: (1)alert函数:显示一个警告对话框,包括一个OK按钮. (2)confirm函数:显示一个确认对话框,包括OK.Cancel按钮. (3)escape函数:将字符转换成Unicode码. (4)eval函数:计算表达式的结果. (5)isNaN函数:测试是(true)否(false)不是一个数字. (6)parseF

AJAX入门之深入理解JavaScript中的函数

ajax|javascript|函数 概述 函数是进行模块化程序设计的基础,编写复杂的Ajax应用程序,必须对函数有更深入的了解.JavaScript中的函数不同于其他的语言,每个函数都是作为一个对象被维护和运行的.通过函数对象的性质,可以很方便的将一个函数赋值给一个变量或者将函数作为参数传递.在继续讲述之前,先看一下函数的使用语法: function func1(-){-}var func2=function(-){-};var func3=function func4(-){-};var f

AJAX入门之深入理解JavaScript中的函数_AJAX相关

概述 函数是进行模块化程序设计的基础,编写复杂的Ajax应用程序,必须对函数有更深入的了解.JavaScript中的函数不同于其他的语言,每个函数都是作为一个对象被维护和运行的.通过函数对象的性质,可以很方便的将一个函数赋值给一个变量或者将函数作为参数传递.在继续讲述之前,先看一下函数的使用语法:  function func1(-){-}var func2=function(-){-};var func3=function func4(-){-};var func5=new Function(

深入理解JavaScript系列(10) JavaScript核心(晋级高手必读篇)_javascript技巧

适合的读者:有经验的开发员,专业前端人员. 原作者: Dmitry A. Soshnikov 发布时间: 2010-09-02 原文:http://dmitrysoshnikov.com/ecmascript/javascript-the-core/ 参考1:http://ued.ctrip.com/blog/?p=2795 参考2:http://www.cnblogs.com/ifishing/archive/2010/12/08/1900594.html 主要是综合了上面2位高手的中文翻译,

通过实例理解javascript中没有函数重载的概念_javascript技巧

将函数名想象为指针,也有助于理解为什么ECMAScript中没有函数重载的概念.如下例子: 复制代码 代码如下: function addSomeNum(num) {     return num+100; } function addSomeNum(num) {     return num+200; } var result=addSomeNum(100);//300 显然,这个例子中声明了两个同名函数,而结果则是后面的函数覆盖了前面的函数.以上代码实际上与下面的代码是一致的. 复制代码 代

javascript中没有函数重载的概念实例讲解

  这篇文章主要介绍了通过实例理解javascript中没有函数重载的概念,十分的简单易懂,需要的朋友可以参考下 将函数名想象为指针,也有助于理解为什么ECMAScript中没有函数重载的概念.如下例子: 代码如下: function addSomeNum(num) { return num+100; } function addSomeNum(num) { return num+200; } var result=addSomeNum(100);//300 显然,这个例子中声明了两个同名函数,

理解javascript 回调函数

在JavaScript中,回调函数具体的定义为:函数A作为参数(函数引用)传递到另一个函数B中,并且这个函数B执行函数A.我们就说函数A叫做回调函数.如果没有名称(函数表达式),就叫做匿名回调函数.因此callback 不一定用于异步,一般同步(阻塞)的场景下也经常用到回调,比如要求执行某些操作后执行回调函数. 例子 一个同步(阻塞)中使用回调的例子,目的是在func1代码执行完成后执行func2. var func1=function(callback){     //do something

深入理解JavaScript系列(4) 立即调用的函数表达式_javascript技巧

前言 大家学JavaScript的时候,经常遇到自执行匿名函数的代码,今天我们主要就来想想说一下自执行. 在详细了解这个之前,我们来谈了解一下"自执行"这个叫法,本文对这个功能的叫法也不一定完全对,主要是看个人如何理解,因为有的人说立即调用,有的人说自动执行,所以你完全可以按照你自己的理解来取一个名字,不过我听很多人都叫它为"自执行",但作者后面说了很多,来说服大家称呼为"立即调用的函数表达式". 本文英文原文地址:http://benalman

深入理解JavaScript系列(2) 揭秘命名函数表达式_javascript技巧

前言 网上还没用发现有人对命名函数表达式进去重复深入的讨论,正因为如此,网上出现了各种各样的误解,本文将从原理和实践两个方面来探讨JavaScript关于命名函数表达式的优缺点. 简单的说,命名函数表达式只有一个用户,那就是在Debug或者Profiler分析的时候来描述函数的名称,也可以使用函数名实现递归,但很快你就会发现其实是不切实际的.当然,如果你不关注调试,那就没什么可担心的了,否则,如果你想了解兼容性方面的东西的话,你还是应该继续往下看看. 我们先开始看看,什么叫函数表达式,然后再说一