1、函数在定义时可以没有返回值;在没有指定返回值时,函数返回的是一个undefined;
2、函数在执行完return语句后立即停止并退出,故,在该语句后面的语句将不会被执行到;
3、一个函数可以包含多个return语句,如在if…… else……中
4、return语句可以不带任何返回值,此时,返回undefined。此用法一般用在需要提前停止函数又不需要返回值时。
5、ECMAscript函数对传递进来的参数没有数量及类型的限制,原因:ECMAscript函数中的参数在内部是用一个数组来表示的,函数接收到的始终是这个数组,不管数组中包含什么,在函数体内,可通过arguments对象来访问这个参数数组,从而获取每一个传递进来的参数。【arguments对象不是数组,只是像而已,可以用方括号访问每一个元素】
6、确定函数传递进来的参数的个数,可以通过arguments.length来获取;
7、ECMAscript中没有重载(不存在函数签名),可以通过arguments.length来确定传入参数的个数,并据此,执行不同的程序,从而模仿重载;
8、arguments对象的长度是由传入的参数决定的,不是由定义函数时的命名参数的个数决定的;
9、没有传递值的命名参数将被赋值为undefined,有定义变量但没初始化;
10、ECMAscript中所有的参数传递的都是值,不可能通过引用传递参数;
11、arguments的值永远与对应的命名参数的值保持同步,但是他们俩是独立的,存在于不同的内存空间,并且这种同步的单向的,即修改arguments中元素的值会影响到对应命名参数的值,但是修改命名参数的值对象的arguments元素的值不受影响;
12、ECMAscript中函数实际上是对象,每个函数都是Function类型的实例,与其他引用类型一样具有属性和方法;
13、函数是对象,故函数名实际上是一个指向函数对象的指针,不会与某个对象绑定【函数是对象,函数名是指针】;
14、一个函数可能有多个名字,就像包含对象指针的其他变量一样,这是因为函数名仅仅是指向函数的指针;
15、使用不带括号的函数名是访问函数指针,使用带括号的函数名是调用函数;
16、函数声明与函数表达式:
①解析器向执行环境中加载数据时,会率先读取函数声明,并使其在执行任何代码之前可用,而函数表达式必须等到解析器执行到它所在的代码行时,才会真正被解析执行;
②除了什么时候可以通过变量访问 函数这一点区别之外,函数声明与函数表达式的语法其实是等价的;
③函数名是变量,故函数也能作为值来使用,不仅可以将函数作为参数传递给另一个函数,还可以将函数作为另一个函数的返回值;