标签:创建 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; };
标签:创建 result java 匿名函数 模仿 some 函数作用域 构造函数 变量
原文地址:https://www.cnblogs.com/easybreezy/p/9159158.html