<html>
<body>
<script>
/*
js闭包概念;
1闭包的方式:
1.1自运行模式(无需调用)。
(function(params_declare){//params_declare 参数声明
//使用params_declare do something
})(parms_value);//parms_value要求是参数值
1.2 方法对象模式:
function Fun(parms){
var innerParams;//内部参数
function innerFun(){//内部函数要求没有参数
//利用fun的参数和innerParmas参数 do something
//注意:innerFun对innerParams的变动,会影响每一个Fun的实例化的对象
}
return innerFun;//必须没有括号
}
调用示例: var fun = new Fun("参数列表");
fun();//实质是调用innerFun方法,此时innerParams是内部的一个"全局"变量
*/
//自运行模式示例:当用户先后按住键盘的ctrl+enter的时候,弹出消息。其中preCode,clickCount是闭包的全局变量
(function(mess){
var clickCount=0;//记录时间触发次数的变量
var preCode="";//记录前一个键盘的Code的便来那个,用于判断是不是ctrl键
document.body.onkeydown = function(){
if(preCode=="17" && event.keyCode=="13"){
clickCount++;//自增
alert(mess+",次数:"+clickCount);//第一次提示消息:"触发事件,次数:1",第二次提示消息:"触发事件,次数:2"
}else{
preCode=event.keyCode;//记录前一个键盘的Code
}
}})("触发事件");
//函数对象模式示例
function Fun(j){
var i=1;
function innerFun(){
alert("j+i="+(j+i));
i+=j;//注意:innerFun对innerParams的变动,会影响每一个Fun的实例化的对象
}
return innerFun;
}
var fun =new Fun(10);
fun();//11
fun();//21
//方法返回的是一个带参数的函数
function add(toadd){
//再次强调:内部函数可以带参数,且可以如下简化写法
return function(baseNumber){
return toadd+baseNumber;
}
/*or
function addWith(baseNumber){
return toadd+baseNumber;
}
return addWith;
*/
}
//调用
var addFun = add(2);//addFun是一个方法 function(num){return 2+num};
var res = addFun(9);//11
var res2 = add(2)(4);//6
var res23 = add(23)(1)//24
alert(res);
</script>
</body>
</html>
分享到:
相关推荐
在JavaScript编程中,闭包是一种强大的特性,它允许内部函数访问并操作外部函数的变量,同时保持这些变量的私有性。沙箱模式是利用闭包实现的一种模块化设计模式,它提供了一种隔离机制,使得模块内的代码不会对全局...
### JavaScript闭包的理解 #### 一、闭包的定义与特点 闭包是JavaScript中一个非常重要的概念,它指的是一个函数能够访问并操作其外部作用域中的变量的能力。这一特性使得JavaScript具有了一些其他语言不具备的...
### JavaScript闭包高级教程 #### 简介 在JavaScript编程中,“闭包”是一个非常重要的概念,尤其对于希望深入理解和高效使用JavaScript的开发者来说。简单地说,闭包是一种能够记住并访问其创建时周围环境的函数...
在JavaScript编程中,单例模式是一种常见的设计模式,它的核心思想是确保一个类只有一个实例,并提供全局访问点。单例模式常用于管理共享资源,如数据库连接、定时任务或者全局配置对象等。在这个场景中,我们将探讨...
在 JS 中,有四种主要的函数调用模式,分别是:普通函数调用、方法调用、构造函数调用和apply/call调用。下面我们将详细探讨这些调用模式。 1. **普通函数调用**: 这是最常见的情况,函数作为一个独立的实体被执行...
### JavaScript闭包与垃圾回收机制详解 #### 一、闭包 ##### 1.1 闭包是什么? 闭包(Closure)是JavaScript中一个非常重要的概念,它涉及到函数及其相关的词法作用域。简单来说,闭包就是能够访问其自身作用域...
根据提供的文件信息,本文将围绕“JavaScript闭包”这一核心概念进行深入解析,并结合描述中的资源分享链接,进一步探讨闭包在JavaScript编程中的应用、优势及其潜在陷阱。 ### JavaScript闭包概述 #### 1. 闭包...
JavaScript中有两种主要的作用域类型: - **全局作用域**: 全局作用域中的变量在整个程序中都是可见的。 - **局部作用域**: 局部作用域中的变量只在其定义的块或函数内可见。 #### 五、闭包 闭包是JavaScript中一...
"柯里化"和"偏函数"是函数式编程中的两种技术,它们可以提升函数的灵活性和重用性。 在实际开发中,"模块化"是解决大型项目复杂度的重要手段,如CommonJS和AMD规范,以及现在广泛采用的ES6模块。"状态管理"如Redux...
JavaScript设计模式详解与函数式编程是开发者提升代码质量和可维护性的重要...通过阅读《JavaScript设计模式详解》和《函数式编程PDF》这样的资源,可以系统学习和实践这两种编程理念,从而在实际工作中更好地应用。
然而,简单的构造函数不能实现继承,因此书中详细探讨了如何通过原型链、借用构造函数和组合使用这两种方式来实现**继承**。 **观察者模式**是事件驱动编程的基础,它定义了对象之间的一对多依赖关系,当一个对象的...
有两种主要的解决方法: 1. 使用立即执行的函数表达式(IIFE): ```javascript for (var i = as.length; i--; ) { (function(i) { as[i].onclick = function() { alert(i); return false; } })(i); } ``` ...
JavaScript是前端开发中的核心语言,其作用域和闭包机制是理解JS运行原理的关键部分。在本章节中,我们将深入探讨这两个概念,帮助你攀登"三座大山"中的第二座——闭包。 首先,我们要了解JavaScript的作用域。作用...
在JavaScript中,主要有两种作用域:全局作用域和局部作用域。全局作用域中的变量在整个脚本中都可访问,而局部作用域中的变量只在其定义的函数或块级作用域内有效。作用域规则帮助我们管理变量,防止全局变量污染,...
JavaScript中的闭包是一种强大的特性,它允许内部函数访问并操作其外部函数的变量,即使外部函数已经执行完毕。这种机制为实现模块化提供了基础。在JavaScript中,模块化设计可以帮助组织代码,保护变量和函数不被...
总结来说,JavaScript中的原型和闭包是两个非常重要的概念。原型是JavaScript实现继承的机制,而闭包是函数和声明的变量在函数返回后仍然可以被访问的一种方式。理解这些概念对于深入掌握JavaScript编程至关重要。
闭包是一种特殊的函数,它能记住其定义时的作用域,即使在函数执行完毕后,仍然可以访问到该作用域内的变量。在JavaScript中,每个函数都具备创建闭包的能力,但通常在嵌套函数中闭包的概念更为突出。 闭包的特点...
在JavaScript中,主要有两种继承模式:原型链继承和类(ES6中的class)继承。原型链继承是JavaScript早期的主要继承方式,它依赖于对象的原型(prototype)属性。而ES6引入的class语法糖,使得JavaScript的继承更加...
总结一下,JavaScript中的订阅发布者模式是一种强大的工具,可以用于创建松散耦合的组件。这种模式在事件驱动编程、异步操作和用户界面更新等场景中尤其有用。通过这种方式,我们可以创建可扩展和可维护的代码,因为...