1.
函数的申明
JavaScript 有三种申明函数的办法。
(1)function 命令
function
命令申明的代码区块,就是一个函数。function
命令前面是函数名,函数名前面是一对圆括号,外面是传入函数的参数。函数体放在大括号外面。
function print(s) { console.log(s);}
(2)函数表达式
除了用function
命令申明函数,还能够采纳变量赋值的写法。
var print = function(s) { console.log(s);};
采纳函数表达式申明函数时,function
命令前面不带有函数名。如果加上函数名,该函数名只在函数体外部无效,在函数体内部有效。
var print = function x(){ console.log(typeof x);};x// ReferenceError: x is not definedprint()// function
(3)Function 构造函数
第三种申明函数的形式是Function
构造函数。
var add = new Function( 'x', 'y', 'return x + y');// 等同于function add(x, y) { return x + y;}
2.函数的反复申明
如果同一个函数被屡次申明,前面的申明就会笼罩后面的申明。
function f() { console.log(1);}f() // 2function f() { console.log(2);}f() // 2
3.length 属性
函数的length
属性返回函数预期传入的参数个数,即函数定义之中的参数个数。
function f(a, b) {}f.length // 2
下面代码定义了空函数f
,它的length
属性就是定义时的参数个数。不论调用时输出了多少个参数,length
属性始终等于2。
4.toString()
函数的toString()
办法返回一个字符串,内容是函数的源码。
function f() { a(); b(); c();}f.toString()// function f() {// a();// b();// c();// }
5.arguments 对象
(1)定义
因为 JavaScript 容许函数有不定数目的参数,所以须要一种机制,能够在函数体外部读取所有参数。这就是arguments
对象的由来。
arguments
对象蕴含了函数运行时的所有参数,arguments[0]
就是第一个参数,arguments[1]
就是第二个参数,以此类推。这个对象只有在函数体外部,才能够应用。
var f = function (one) { console.log(arguments[0]); console.log(arguments[1]); console.log(arguments[2]);}f(1, 2, 3)// 1// 2// 3
失常模式下,arguments
对象能够在运行时批改。
(2)与数组的关系
须要留神的是,尽管arguments
很像数组,但它是一个对象。数组专有的办法(比方slice
和forEach
),不能在arguments
对象上间接应用。
如果要让arguments
对象应用数组办法,真正的解决办法是将arguments
转为真正的数组。上面是两种罕用的转换方法:slice
办法和逐个填入新数组。
var args = Array.prototype.slice.call(arguments);// 或者var args = [];for (var i = 0; i < arguments.length; i++) { args.push(arguments[i]);}
(3)callee 属性
arguments
对象带有一个callee
属性,返回它所对应的原函数。