延迟调用
setTimeout 函数允许在指定时间之后在全局对象(window 对象)里执行一个无参数函数。利用闭包的特性,我们就可以给这个函数传递参数。
function dosomething(param) {
return (function() {
//这里可以得到 param 这个参数
alert(param);
});
}
setTimeout(dosomething('参数'), 1000);
命名空间
闭包包含了函数代码和绑定了自由变量的计算环境,这个环境就可以给函数提供一个私有的命名空间。这个特性可以用在很多情况下。例如一个字符串解析函数需要一个特殊字符列表,如果把这个列表定义在函数体中,那么每次调用这个函数的时候都要重新初始化一次特殊字符列表。有两种方法可以避免这种重复计算,一是把特殊字符列表定义成全局的变量。但这样至少会产生两个问题,污染了全局命名空间,同时这个全局变量在任何地方都可以被修改。第二种方法就是利用闭包,示例代码如下。
var parse = function(){
var list = ['t', 'n', '\' /* other */];
return function(str /* 要解析的目标字符串 */) {
//do parse
};
}();
parse('hello');
这样,不管调用多少次 parse 函数,特殊字符列表都不会重新初始化了,而且外部任何地方都无法访问这个列表。
通过闭包可以做什么,以上只是举两个比较常见的例子,有一篇文章说闭包什么都可以做。有的时候不用闭包可能也可以实现相应的功能,但闭包使 JavaScript 变得更加灵活,可以让你写出更加优雅的代码。要详细解答这个问题要通过大量的实践和总结了,我们只要对它的原理理解了,平时开发的时候多思考,就知道该不该用闭包了。
-EOF-
分享到:
相关推荐
闭包具有多种应用场景,其中一些常见的用途包括: - **模块化编程**:利用闭包可以隐藏变量和函数,只暴露必要的接口,提高代码的封装性。 - **私有变量**:创建只有特定函数可以访问的私有变量。 - **回调函数**:...
闭包的一个常见用途是实现数据私有化。由于JavaScript没有类级别的私有属性,开发者可以利用闭包来模拟私有变量。例如: ```javascript function counter() { let count = 0; return { increment: function() {...
尽管函数和闭包在用途上有许多相似之处,但闭包的特性使其更灵活。闭包可以捕获和存储常量和变量,这使得它们能用作异步操作的回调,或者实现像惰性初始化这样的高级功能。另一方面,函数更像传统的程序单元,主要...
闭包的用途广泛,主要有以下几点: 1. **保护变量**:闭包可以用来创建私有变量,因为外部无法直接访问这些变量,避免了全局变量污染和意外修改。 2. **数据持久化**:如上述示例所示,通过闭包,局部变量可以在...
#### 四、闭包的特殊用途 ##### 1. 模拟块级作用域 JavaScript本身没有块级作用域的概念,但是通过创建并立即执行的匿名函数可以模拟出这一特性: ```javascript (function() { var secret = 'hidden'; console...
4. **闭包的用途** - **读取内部变量**:闭包提供了一种方式,使得外部可以间接访问到内部函数的局部变量,但不能直接修改它们。 - **保持变量状态**:由于闭包的存在,函数内部的变量不会在函数执行完后立即销毁...
闭包可以用于各种用途,如延迟执行(例1:为函数引用设置延时)、封装相关功能(例2:包装相关的功能)等。例如,你可以使用闭包来实现定时器,确保函数只在特定时间后执行,而不是立即执行。 在JavaScript中,`...
闭包的用途非常广泛,以下是几个常见用例: 1. 模拟私有变量和方法:在面向对象编程中,有时需要封装某些变量和方法,使其对外不可见。在JavaScript中,利用闭包可以实现私有成员,外部无法直接访问,但可以通过...
四、闭包的用途 1. 保护变量:闭包可以用来保护函数内的变量不被外部直接访问,实现数据的封装。 2. 保持状态:闭包可以使得函数内的变量在函数执行结束后仍然存在于内存中,下次调用时仍然能访问到这些变量。例如,...
闭包在实际编程中有很多用途,例如数据封装、延迟计算、异步操作回调、模块化等。例如,在JavaScript或ActionScript这样的语言中,常常使用闭包来实现数据绑定,如描述中的Flex数据绑定语法,通过`x="{b.num + c.num...
闭包有多种用途,其中两个主要用途如下: 1. **读取函数内部的变量**:如上例所示,闭包可以让函数内部的局部变量对外部可见。 ```javascript function f1() { var n = 999; function f2() { alert(n); } ...
我们来看看闭包的用途。事实上,通过使用闭包,我们可以做很多事情。比如模拟面向对象的代码风格;更优雅,更简洁的表达出代码;在某些方面提升代码的执行效率。 1 匿名自执行函数 我们知道所有的变量,如果不加上...
闭包在程序设计中是一种非常重要的概念,尤其是在像PHP...总之,闭包在PHP中是一个强大的工具,它可以用于创建回调函数、延迟执行、数据封装、状态保持等多种用途。理解和熟练使用闭包是提升PHP编程技能的关键一步。
闭包的主要用途是实现数据封装,创建私有变量和方法,以及在异步操作中保持状态。理解闭包的关键在于,当内部函数引用外部函数的变量时,它会捕获这些变量的当前值,形成一个“作用域快照”。这意味着即使外部函数...
4. **Prototype的用途** Prototype是JavaScript中面向对象编程的关键部分,它允许对象共享属性和方法。在上述代码中,`dom.prototype`被用来添加对象的方法。`Display`方法是原型链上的方法,可以通过实例调用,而`...
闭包的一个主要用途是实现数据隐私,即设计私有方法和变量。在JavaScript中,没有真正的私有成员,但可以通过闭包模拟这一行为: ```javascript function counter() { var count = 0; return { increment: ...
本文将深入探讨JavaScript闭包的概念、工作原理及其常见用途。 首先,我们需要了解JavaScript的作用域。在JavaScript中,每个函数都有自己的作用域,即变量和函数的可见范围。全局作用域在整个程序中都是可访问的,...
闭包的用途: 1. 数据隐藏与封装:闭包可以用来创建私有变量,防止变量被全局作用域污染,避免与其他代码冲突。 2. 模块化:通过闭包,可以实现模块之间的数据隔离,每个模块都有自己的私有空间,互不影响。 3. 延迟...