函数

函数:

函数的声明: “function”是关键字。

1.1

// 函数的声明

function test(){

  //方法体

}

1.2

//函数的表达式  也叫匿名函数

注:采用函数表达式声明函数时,function命令后面不带有函数名。

var test = function() {

//方法体

}

1.3

//函数的重复声明

如果多次采用function命令,重复声明同一个函数,则后面的声明会覆盖前面的声明。

function f(){
  console.log(1);
}
f(); // 2
function f(){
  console.log(2);
}
f(); // 2


2.形式参数和return语句

调用函数时,要使用圆括号运算符。圆括号之中,可以加入函数的参数。

function add(x,y) {
  return x+y;
}
add(1,1) // 2

3. 立即调用的函数表达式(IIFE(Immediately-Invoked Function Expression))

有时,我们需要在定义函数之后,立即调用该函数。这时,你不能在函数的定义之后加上圆括号,这会产生语法错误。产生这个错误的原因是,Javascript引擎看到function关键字之后,认为后面跟的是函数定义语句,不应该以圆括号结尾。

function(){ /* code */ }();
// SyntaxError: Unexpected token (

解决方法: 圆括号前面的部分不是函数定义语句,而是一个表达式,可以对此进行运算。

(function(){ /* code */ }()); 
// 或者
(function(){ /* code */ })();

注意,上面的两种写法的结尾,都必须加上分号。

4. 第一等公民

JavaScript的函数与其他数据类型处于同等地位,可以使用其他数据类型的地方就能使用函数。比如,可以把函数赋值给变量和对象的属性,也可以当作参数传入其他函数,或者作为函数的结果返回。这表示函数与其他数据类型的地方是平等,所以又称函数为第一等公民。

function add(x, y) {
    return x + y;
}
// 将函数赋值给一个变量
var fn = add;
console.log(fn(1, 2));
// 将函数作为参数和返回值
function operator(fn) {
    return fn;
}
console.log(operator(add)(1, 2));

5. 函数名的提升

JavaScript引擎将函数名视同变量名,所以采用function命令声明函数时,整个函数会被提升到代码头部。所以,下面的代码不会报错。

var sum = add(1, 2);
console.log(sum);
function add(x, y) {
    return x + y;
}

表面上,上面代码好像在声明之前就调用了函数add。但是实际上,由于“变量提升”,函数f被提升到了代码头部,也就是在调用之前已经声明了。但是,如果采用赋值语句定义函数,JavaScript就会报错。

var sum = add(1, 2);
console.log(sum);
var add = function (x, y) {
    return x + y;
}
//Uncaught TypeError: add is not a function

5. 函数名的提升

JavaScript引擎将函数名视同变量名,所以采用function命令声明函数时,整个函数会被提升到代码头部。所以,下面的代码不会报错。

var sum = add(1, 2);
console.log(sum);
function add(x, y) {
    return x + y;
}

表面上,上面代码好像在声明之前就调用了函数add。但是实际上,由于“变量提升”,函数f被提升到了代码头部,也就是在调用之前已经声明了。但是,如果采用赋值语句定义函数,JavaScript就会报错。

var sum = add(1, 2);
console.log(sum);
var add = function (x, y) {
    return x + y;
}
//Uncaught TypeError: add is not a function

如果同时采用function命令和赋值语句声明同一个函数,最后总是采用赋值语句的定义。

var fn = function() {
    console.log ("1");
};
function fn() {
    console.log("2");
}
fn();
// 1

6. 函数的属性和方法

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

function fn1() {}
console.log(fn1.name);
var fn2 = function() {};
console.log(fn2.name);
var fn3 = function fn3() {};
console.log(fn3.name);

6.2 length属性:返回函数定义中参数的个数。

function fn(x, y) {}
console.log(fn.length);

7.arguments对象

1) 由于JavaScript允许函数有不定数目的参数,所以我们需要一种机制,可以在函数体内部读取所有参数。这就是arguments对象的由来。
2)arguments对象包含了函数运行时的所有参数,arguments[0]就是第一个参数,arguments[1]就是第二个参数,依次类推。这个对象只有在函数体内部,才可以使用。
3)可以通过arguments对象的length属性,判断函数调用时到底带几个参数。

posted @ 2017-04-23 15:04  像疯了一样  阅读(197)  评论(0编辑  收藏  举报