JavaScript函数

1.概述

javascript有三种方法可以声明一个函数。

function命令后跟函数名,函数名后跟一个小括号,小括号里可以放参数,函数体放在大括号里。这叫做函数的声明(Function Declaration)。

除了用function命令声明函数,还可以采用变量赋值的写法。这种写法将一个匿名函数赋值给变量。这时,这个匿名函数又称函数表达式(Function Expression),因为赋值语句的等号右侧只能放表达式。

还有第三种声明函数的方式:Function构造函数。
你可以传递任意数量的参数给Function构造函数,只有最后一个参数会被当做函数体,如果只有一个参数,该参数就是函数体。Function构造函数可以不使用new命令,返回结果完全一样。总的来说,这种声明函数的方式非常不直观,几乎无人使用。

2.函数的属性和方法

name 属性返回紧跟着function关键字之后的那个函数名。

length属性返回函数预期传入的参数个数,即函数定义之中的参数个数。

函数的toString方法返回函数的源码。

3.函数的作用域

作用域(scope)指的是变量存在的范围。Javascript只有两种作用域:一种是全局作用域,变量在整个程序中一直存在,所有地方都可以读取;另一种是函数作用域,变量只在函数内部存在。

在函数内部定义的变量,外部无法读取,称为“局部变量”(local variable)。

注意,对于var命令来说,局部变量只能在函数内部声明,在其他区块中声明,一律都是全局变量。

与全局作用域一样,函数作用域内部也会产生“变量提升”现象。var命令声明的变量,不管在什么位置,变量声明都会被提升到函数体的头部。

总之,函数执行时所在的作用域,是定义时的作用域,而不是调用时所在的作用域。

很容易犯错的一点是,如果函数A调用函数B,却没考虑到函数B不会引用函数A的内部变量。

4.参数

函数运行的时候,有时需要提供外部数据,不同的外部数据会得到不同的结果,这种外部数据就叫参数。

数参数不是必需的,Javascript允许省略参数。

被省略的参数的值就变为undefined。需要注意的是,函数的length属性与实际传入的参数个数无关,只反映函数预期传入的参数个数。

但是,没有办法只省略靠前的参数,而保留靠后的参数。如果一定要省略靠前的参数,只有显式传入undefined。

如果有同名的参数,则取最后出现的那个值。

由于JavaScript允许函数有不定数目的参数,所以我们需要一种机制,可以在函数体内部读取所有参数。这就是arguments对象的由来。

arguments对象包含了函数运行时的所有参数,arguments[0]就是第一个参数,arguments[1]就是第二个参数,以此类推。这个对象只有在函数体内部,才可以使用。

需要注意的是,虽然arguments很像数组,但它是一个对象。数组专有的方法(比如slice和forEach),不能在arguments对象上直接使用。

但是,可以通过apply方法,把arguments作为参数传进去,这样就可以让arguments使用数组方法了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 函数就是最基本的一种代码抽象的方式。 定义函数function abs(x) {if (x >=0){return...
    _我和你一样阅读 475评论 0 0
  • 函数函数定义与调用变量作用域全局变量方法高阶函数闭包箭头函数$generator$ 函数 函数定义与调用 定义函数...
    染微言阅读 641评论 0 5
  • 知识点: 函数声明的三种方式; 函数的重复声明; 函数作为第一等公民; 函数名的提升5.不能在条件语句中声明函数 ...
    edwin_hei阅读 336评论 0 0
  • 上一章 “陆亦风,我承认我现在有些喜欢你,但仅仅是喜欢,我以为以后会有所改变,但至少不是现在,所以刚刚我没有和我家...
    狐狸九阅读 425评论 0 4