闭包的应用实例
2018-01-18 09:37
369 查看
1、概述
闭包实质:将内部函数传递到所在的词法作用域以外,内部函数仍然持有对原始定义作用域的引用。
2、应用
(1)定时器
(2)事件监听器
(3)ajax
(4)异步(同步)操作
只要使用了回调函数,实际上就是使用了闭包。
(5)模块
总结:
函数可以记住并访问所在的词法作用域,即使函数是在当前词法作用域之外执行,这是就产生了闭包。
闭包实质:将内部函数传递到所在的词法作用域以外,内部函数仍然持有对原始定义作用域的引用。
2、应用
(1)定时器
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8" /> <title>闭包的应用</title> </head> <body> <script type="text/javascript"> function wait(message) { setTimeout(function timer() { //延时函数回调函数timer //timer内部函数具有涵盖wait函数作用域的闭包,还有对变量message的引用 console.log(message); }, 1000) } wait('闭包函数应用') </script> </body> </html>
(2)事件监听器
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8" /> <title>闭包的应用</title> </head> <body> <script type="text/javascript"> function test() { var a = 0; //事件监听器 保持对test作用域的访问 $('ele').on('click', function() { a++; }); } </script> </body> </html>
(3)ajax
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8" /> <title>闭包的应用</title> </head> <body> <script type="text/javascript"> ! function() { var localData = "localData here"; var url = "http://www.baidu.com/"; //ajax使用了localData,url $.ajax({ url: url, success: function() { // do sth... console.log(localData); } }); }(); </script> </body> </html>
(4)异步(同步)操作
只要使用了回调函数,实际上就是使用了闭包。
(5)模块
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8" /> <title>闭包的应用</title> </head> <body> <script type="text/javascript"> var foo = ( function Module() { var something = 'cool'; var another = [1, 2]; function doSomething() { console.log(something) } function doAnother() { console.log(another.join(',')) } return { doSomething: doSomething, doAnother: doAnother } } )(); foo.doSomething(); foo.doAnother(); </script> </body> </html>
总结:
函数可以记住并访问所在的词法作用域,即使函数是在当前词法作用域之外执行,这是就产生了闭包。
相关文章推荐
- javascript 闭包详解及简单实例应用
- 窥探 Swift 之 函数与闭包的应用实例
- js 闭包的定义以及应用实例
- 闭包应用实例
- 关于闭包的简单应用实例--getter && setter以及迭代器
- 窥探Swift之函数与闭包的应用实例
- 窥探Swift之函数与闭包的应用实例
- Swift 之 函数与闭包的应用实例
- 窥探 Swift 之 函数与闭包的应用实例
- Swift - 函数 & 闭包的应用实例
- 窥探 Swift 之 函数与闭包的应用实例
- Windows 8应用实例解析 - WinRT下创建GIF动画(Flipflop)
- Spring Boot集成Spring Data Reids和Spring Session实现Session共享(多个不同的应用共用一个Redis实例)
- ext2.0树控件综合应用实例
- 闭包在DSL中的应用,领域特定语言的笔记
- C++中引用(&)的用法和应用实例
- C#循环结构应用实例(三)
- 06.数据库日常应用实例
- 实例讲解Android应用中自定义组合控件的方法
- Vue.js—组件快速入门及Vue路由实例应用