js中的函数

/* 来源具体可查看《JavaScript模式》 */

一、函数特点

1、函数时第一类对象

  • 函数在运行时动态创建,还可以在程序执行过程中创建
  • 函数可以分配给变量,可以将它们的引用复制到其他变量,可以被扩展,此外,除少数情况外,函数还可以删除
  • 可以作为参数传递给其他函数,并且还可以由其他函数返回
  • 函数可以有自己的属性和方法

2、函数提供了作用域

在函数内部以var关键字定义的任何变量都是局部变量,对于外部函数是不可见的。(需注意对于if和for来说,并不意味着也是局部变量)

二、函数的定义

1、命名函数表达式

var add=function add(a,b) {
        return a + b;
    };

2、函数表达式,又称匿名表达式

var add=function (a,b) {
        return a + b;
    };

3、函数声明

function add(a,b) {
        return a + b;
    }

三、函数的提升

函数声明与命名函数表达式或者匿名函数的区别在于提升行为。

函数声明被提升到了函数顶部(a函数整体),而表达式b,仅提升了var b;
可参考 函数的预解析和逐行解读

function test() {
        console.log(typeof a);  //function
        console.log(typeof b);  //undefind

        a();  //'我被弹出'
        b();  //' b is not a function ' 

        function a() {
            alert('我被弹出');
        }
        var b=function () {
            alert('我没有弹出')
        }
    }
    test();

四、函数相关的模式

1、回调模式。
函数都是对象,因此它们可以作为参数传递给其他函数。

function getResult() {
    //获取到一些值
}
function doSth(callback) {
    callback();
    //do something
}
doSth(getResult)

2、返回函数

var steup = function () {
    var count = 0;
    return function () {
        return (count += 1)
    };
};
    var next=steup();
    next();  //1
    next();  //2
    next();  //3

steup()包装了返回函数,创建了一个闭包,可以使用这个闭包存储一些私有数据,而这些数据仅可被该返回函数访问,但外部代码无法访问。

3、自定义函数(惰性函数)
函数可以动态定义,也可以分配给变量。

var scareMe = function () {
        alert('逗');
        scareMe=function () {
            alert('逗b欢乐多')
        };
    };  

    scareMe();  //'逗'    
    scareMe();  //'逗b欢乐多'    
    scareMe();  //'逗b欢乐多'    
    scareMe();  //'逗b欢乐多'    
    scareMe();  //'逗b欢乐多'

当函数有一些初始化准备工作要做,并且仅需要执行一次,这种模式函数很有用的。

4、即时函数(自调用)

语法:

(function () {
    alert('hello');
}());

 (function () {
    alert('hello');
})();

即时函数的返回值
1、具体的值

var result=(function () {
    return 2+2;
}())

2、任意的值

var result=(function () {
    var res= ?;  //获取需要的值;
    return function () {
        return res;
    };
}())

优点:
定义的所有这些变量将会是用于自调用函数的局部变量,并且不用担心全局空间被临时变量所污染。

/待完善/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值