码迷,mamicode.com
首页 > 编程语言 > 详细

JavaScript函数表达式

时间:2018-06-11 02:18:55      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:创建   result   java   匿名函数   模仿   some   函数作用域   构造函数   变量   

函数声明

函数声明提升

函数表达式

匿名函数/拉姆达函数

 

1 递归

2 闭包(有权访问另一个函数作用域中的变量的函数)

2.1 闭包与变量

闭包只能取得包含函数中任何变量的最后一个值。

function createFunctions() {
    var result = new Array();

    for (var i = 0; i < 10; i++) {
        result[i] = function() {
            return i;
        }
    }

    return result;
}

// 结果返回10个10;

可以通过创建另一个匿名函数强制让闭包的行为符合预期(但是感觉有点蠢而且容易乱)

function createFunctions() {
    var result = new Array();

    for (var i = 0; i < 10; i++) {
        result[i] = function(num) {
            return function() {
                return num;
            }
        }
    }
}

2.2 关于this对象

匿名函数的执行环境具有全局性,通过call()或apply()改变函数执行环境的情况下,this就会指向其他对象。

var name = "The Window";

var object = {
    name: "My Object",
    getNameFunc: function() {
        return function() {
            return this.name;
        }
    }
};

alert(object.getNameFunc()()); //"The Window"(在非严格模式下)

2.3 内存泄漏

如果闭包的作用域链中保存着一个html元素,将会导致该元素无法被销毁。

function assignHandler() {
    var element = document.getElementById("someElement");
    var id = element.id;

    element.onclick = function() {
        alert(id);
    };

    //Important!!!
    element = null;
}

 

3 模仿块级作用域

JavaScript没有块级作用域的概念。

function outputNumbers(count) {
    for (var i=0; i < count; i++) {
        alert(i);
    }

    alert(i); //计数
}

匿名函数可以用来模仿块级作用域。

(function() {
    // 这里是块级作用域
})();
function() {
    
}(); //出错!

 

4 私有变量

JavaScript中并没有私有成员的概念,所有对象属性都是公有的。

有权访问私有变量和私有构造函数的公有方法被称为特权方法。

function MyObject() {
    //私有变量和私有函数
    var privateVariable = 10;

    function privateFunction() {
        return false;
    };

    this.publicMethod = function() {
        privateVariable++;
        return privateFunction();
    };
}

4.1 静态私有变量

(function() {

    //私有变量和私有函数
    var privateVariable = 10;

    function privateFunction() {
        return false;
    }

    MyObject = function() {
    };

    MyObject.prototype.publicMethod = function() {
        privateVariable++;
        return privateFunction();
    };
})();

4.2 模块模式

var singleton = function() {

    //私有变量和私有函数
    var privateVariable = 10;

    function privateFunction() {
        return false;
    }

    return {
        publicProperty: true,
        publicMethod: function() {
            privateVariable++;
            return privateFunction();
        }
    };
};

4.3 增强的模块模式

var singleton = function() {

    //私有变量和私有函数
    var privateVariable = 10;

    function privateFunction() {
        return false;
    }

    //创建对象
    var object = new CustomType();

    //添加特权/公有属性和方法
    object.publicProperty = true;
    object.publicMethod = function() {
        privateVariable++;
        return privateFunction();
    };

    //返回这个对象
    return object;
};

 

JavaScript函数表达式

标签:创建   result   java   匿名函数   模仿   some   函数作用域   构造函数   变量   

原文地址:https://www.cnblogs.com/easybreezy/p/9159158.html

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