javascript特殊函数-匿名函数-自调函数-匿名回调函数-注意事项-作为值的函数

作者: 鲁智深 分类: JAVASCRIPT 发布时间: 2015-12-05 15:37

arguments对象模拟重载

重载,简单说,就是函数或者方法有相同的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。arguments对象,输出的类数组对象,获取调用函数时传递的实参,注意 – 仅在函数体中有效。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
function fn() {
    console.log(arguments);//获取传入全部的值
}
fn(1);
fn(1,2);
fn(1,2,3);

// JavaScript的函数不存在重载
function fn1(a,b) {
    console.log(a,b);
}
function fn1(a,b,c) {
    console.log(a,b,c);
}
fn1(1,2);
fn1(1,2,3);

// arguments对象模拟函数的重载效果
function fn2() {
    if(arguments.length == 2) {
        console.log(arguments[0],arguments[1]);
    }else{
        console.log(arguments[0],arguments[1],arguments[2]);
    }
}
fn2(1,2);
fn2(1,2,3);

匿名函数

1
2
3
4
5
6
7
//特殊函数
//匿名函数,JavaScript的语法结构并不支持匿名函数的定义
//function (){return 1};不支持,函数名为匿名

function () {
    console.log(1);
}

自调函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//顾名思义自己调用自己就可以执行,不需要函数外调用执行
//自调函数的就是在括号中加入一个匿名函数,在再外面最后加一个括号
//第一个小括号定义自调函数,第二个小括号调用函数
(function () {return 1;})();
//分开后
(function () {
    console.log(111);
})();

//也可以传入参数
(function(a){
    console.log(a);
})(100);

//第一个括号中的匿名函数接受一个参数。
//第二个括号,在调用时,向匿名函数传递参数内容。

//jslint推荐写法,老外写法
(function(b){
    console.log('b');
}());

//前面加运算符
+function(a){
    console.log(a);
}(100);

!function(a){
    console.log(a);
}(100);

回调函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 回调函数 - 一个函数作为另一个函数的参数,而作为参数的函数就叫做回调函数

//个人理解:当函数fn和fn1作为一个变量时,函数fn2通过参数形参将发外部函数fn和fn1传入自身函数体
//a,b变量就成为回调函数,在fn2函数体内可以随意调用。
var fn = function ( ) {
    return 200;
}

var fn1 = function () {
    return 100;
}

function fn2(a,b) {
    console.log(a(),b());
}

fn2(fn,fn1);

匿名回调函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//和上一个回调函数类型,只是将调用定义函数的参数换成了调用匿名函数
//需要注意的是匿名函数,单独是不能成立的,会报错
function fn1(a,b) {
    console.log( a() + b() );//这里需要在函数体内调用传入的参数
}

fn1(function(){return 1;},function(){return 1;});//匿名函数自己不执行函数体

//自调函数
function fn(a ,b) {
    console.log(a ,b);
}
var a = function(){return 1;}();
var b = function(){return 1;}();

fn(a,b);

回调函数的注意事项

1
2
3
4
5
6
7
8
9
//定义了函数fn
function fn(a,b) {
    var x = 1, y = 2;//局部变量
    return a(x) + b(y);//调用匿名函数
}
//注意点:函数体内返回值a,需要先定义a(形参)
//调用函数fn
var res23213 = fn(function(a){return a;},function(b){return b;});
console.log(res23213);

作为值的函数

1
2
3
4
5
6
7
8
9
10
11
12
13
//将一个函数作为另一个函数的结果进行返回,作为结果返回的函数称之为作为值的函数。
function fn(){
    var a = 'a';// 局部变量
    // 返回值
    return function(){// 内部函数
        return a;
    }
}

var fun = fn();//执行fn,返回一个值(匿名函数),在赋值给fun
console.log(fun);//输出function

console.log(fun());//执行函数,返回a

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注