美文网首页
JavaScript函数

JavaScript函数

作者: 低调的程序员 | 来源:发表于2017-03-21 22:49 被阅读0次

    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使用数组方法了。

    相关文章

      网友评论

          本文标题:JavaScript函数

          本文链接:https://www.haomeiwen.com/subject/gjtogttx.html