码迷,mamicode.com
首页 > 其他好文 > 详细

函数表达式

时间:2020-01-07 18:14:17      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:app   命名参数   singleton   icp   lse   模式   cme   nts   ie9   

函数表达式:
一、Function类型:
1、定义函数的方式:
1)函数声明;
2)函数表达式;
3)使用Function构造函数。
 
2、函数名仅是指向函数的指针。
3、函数没有重载。
4、函数声明提升:
1)在代码开始执行前,解析器会先读取函数声明,并将其添加到执行环境中。
2)函数声明会覆盖变量声明,但不会覆盖变量赋值。
5、作为值的函数:函数不仅可以作为参数传递,而且可以作为另一个函数的结果返回。
function compare(property) {
    return function(obj1, ojb2) {
        var value1 = obj1[property];
        var value2 = obj2[property];
 
    if(value1 < value2) {
            return -1;
        }else if(value1 > value2) {
            return 1;
        }else {
            return 0;
        }
    };
}
arr.sort(compare(property));
 
6、函数内部属性:
1)arguments是一个类数组对象,用来保存函数的参数。
2)arguments.callee指向拥有arguments对象的函数。
function factorial(num) {
    if(num <= 1) {
        return 1;
    }else {
        return num * arguments.callee(num-1);
    }
}
3)arguments.callee.caller指向调用当前函数的函数。
4)this引用的是函数据以执行的环境对象,在全局作用域中调用函数,this对象引用的就是window。
 
7、函数属性和方法
1)属性:
length:表示函数希望接收的命名参数个数。
prototype:指向函数的原型对象。
2)方法:
apply()与call()的用途都是在特定的作用域中调用函数(扩充函数赖以执行的作用域),实际上等于设置函数体内this对象的值。
apply()方法接收两个参数:第一个是作用域对象(this值),第二个是参数数组(或argumets对象)。
call()方法接收多个参数:第一个是作用域对象(this值),其余参数必须逐个列举。
 
二、闭包
1、闭包是指有权访问另一个函数作用域中变量的函数,创建闭包的常见方式,是在一个函数内部创建另一个函数。
2、闭包只能获取包含函数中任何变量的最后一个值。
3、匿名函数也叫拉姆达函数,匿名函数的执行环境具有全局性,其this对象通常指向window。
4、闭包的问题:
1)闭包携带包含函数的作用域,因此会比其他函数占用更多的内存。
2)IE9以下浏览器,在闭包中调用HTML对象,会导致元素无法销毁,引发内存泄漏。
5、闭包的作用:
1)模仿块级作用域:
(function() {
    // 块级作用域
})();
 
2)为私有变量创建特权方法:
私有变量包括函数的参数、局部变量和在函数内部定义的其他函数。
有权访问私有变量和私有函数的公有方法称为特权方法。
 
A、构造函数模式:
function MyObject() {
    // 定义私有变量和私有函数
 
    // 特权方法
    this.publicMethod = function() {};
}
 
B、原型模式:
(function() {
    // 定义私有变量和私有函数
 
    MyObject = function() {};
    // 特权方法
    MyObject.prototype.publicMethod = function() {};
})();
 
C、模块模式(适合单例,单例是指只有一个实例的对象):
var singleton = function() {
    // 定义私有变量和私有函数
 
    // 特权方法、公有属性
    return {
        publicProperty: ‘‘,
        publicMethod: function() {}
    };
}
 

函数表达式

标签:app   命名参数   singleton   icp   lse   模式   cme   nts   ie9   

原文地址:https://www.cnblogs.com/webenjoy/p/12162665.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!