SlideShare a Scribd company logo
1 of 15
JavaScript 闭包分享(一) 闭包传递参数 taibo@alipay.com
闭包的结构
常见结构:独立语句 (function() { // your code... })();
常见结构:表达式(缓存示例) var get = function() { var cache = {}; return function(selector) {   if(cache.hasOwnProperty(selector)) return selector.cache;  return cache.selector = D.query(selector); }; }();
闭包的优点 天然的安全性 var => private 逻辑相对独立 函数式编程的优势 延迟计算 概念简单易懂 变化多端
闭包的参数传递
回顾: (function() { // your code... })(); (function($) { 	$(function() { 	// code on DOMReady… }); })(jQuery);
传递常见引用:示例 (function(w, d) { // w.setTimeout(… // d.getElementById(… })(window, document); (function(win, doc) { 	// win.setTimeout(… 	// doc.getElementById(… })(window, document);
传递常见引用:优点 特定范围内的作用域 快捷引用 减少压缩后字节数 更好的代码混淆
传递常见引用:缺点 长时间持有对window的引用,导致特定场景下的跨域冲突
传递“无引用”:示例 (function(undefined) { // if(typeofwindow.Tracker === undefined) { // … })();
传递“无引用”:优点 安全地使用undefined 快捷引用 减少压缩后字节数 更好的代码混淆
传递“无引用”:缺点 暂时没有,推荐使用
比较:测试变量/对象是否可用 if(myVar) if(window.myVar) if(!!myVar) if(typeofmyVar !== ‘undefined’) if(typeofmyVar !== undefined) if(myObj.myVar) if(myObj.hasOwnProperty(‘myVar’) if(typeofmyObj.myVar !== undefined)
thnaksQ & A

More Related Content

What's hot

深入淺出 Web 容器 - Tomcat 原始碼分析
深入淺出 Web 容器  - Tomcat 原始碼分析深入淺出 Web 容器  - Tomcat 原始碼分析
深入淺出 Web 容器 - Tomcat 原始碼分析Justin Lin
 
Python xmlrpc-odoo
Python xmlrpc-odooPython xmlrpc-odoo
Python xmlrpc-odoorobin yang
 
C python 原始碼解析 投影片
C python 原始碼解析 投影片C python 原始碼解析 投影片
C python 原始碼解析 投影片kao kuo-tung
 
PHPUnit + Xdebug 单元测试技术
PHPUnit + Xdebug 单元测试技术PHPUnit + Xdebug 单元测试技术
PHPUnit + Xdebug 单元测试技术hoopchina
 
180518 ntut js and node
180518 ntut js and node180518 ntut js and node
180518 ntut js and nodePeter Yi
 
Jni攻略之八――操作对象的构造方法
Jni攻略之八――操作对象的构造方法Jni攻略之八――操作对象的构造方法
Jni攻略之八――操作对象的构造方法yiditushe
 
Java script 编程 第2课 条件与循环
Java script 编程 第2课 条件与循环Java script 编程 第2课 条件与循环
Java script 编程 第2课 条件与循环willchrisup
 
Php for fe
Php for fePhp for fe
Php for fejay li
 
jQuery源码学习
jQuery源码学习jQuery源码学习
jQuery源码学习fangdeng
 
lambda/closure – JavaScript、Python、Scala 到 Java SE 7
lambda/closure – JavaScript、Python、Scala 到 Java SE 7lambda/closure – JavaScript、Python、Scala 到 Java SE 7
lambda/closure – JavaScript、Python、Scala 到 Java SE 7Justin Lin
 
改善程序设计技术的50个有效做法
改善程序设计技术的50个有效做法改善程序设计技术的50个有效做法
改善程序设计技术的50个有效做法crasysatan
 
JavaScript 教程
JavaScript 教程JavaScript 教程
JavaScript 教程Bobby Zhou
 
由Hash Set谈重用
由Hash Set谈重用由Hash Set谈重用
由Hash Set谈重用yiditushe
 
潜力无限的编程语言Javascript
潜力无限的编程语言Javascript潜力无限的编程语言Javascript
潜力无限的编程语言Javascriptjay li
 
千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7Justin Lin
 
Asp.net mvc 培训
Asp.net mvc 培训Asp.net mvc 培训
Asp.net mvc 培训lotusprince
 
Java多线程设计模式
Java多线程设计模式Java多线程设计模式
Java多线程设计模式Tony Deng
 
异步编程与浏览器执行模型
异步编程与浏览器执行模型异步编程与浏览器执行模型
异步编程与浏览器执行模型keelii
 

What's hot (20)

深入淺出 Web 容器 - Tomcat 原始碼分析
深入淺出 Web 容器  - Tomcat 原始碼分析深入淺出 Web 容器  - Tomcat 原始碼分析
深入淺出 Web 容器 - Tomcat 原始碼分析
 
Python xmlrpc-odoo
Python xmlrpc-odooPython xmlrpc-odoo
Python xmlrpc-odoo
 
C python 原始碼解析 投影片
C python 原始碼解析 投影片C python 原始碼解析 投影片
C python 原始碼解析 投影片
 
PHPUnit + Xdebug 单元测试技术
PHPUnit + Xdebug 单元测试技术PHPUnit + Xdebug 单元测试技术
PHPUnit + Xdebug 单元测试技术
 
180518 ntut js and node
180518 ntut js and node180518 ntut js and node
180518 ntut js and node
 
Jni攻略之八――操作对象的构造方法
Jni攻略之八――操作对象的构造方法Jni攻略之八――操作对象的构造方法
Jni攻略之八――操作对象的构造方法
 
Java script 编程 第2课 条件与循环
Java script 编程 第2课 条件与循环Java script 编程 第2课 条件与循环
Java script 编程 第2课 条件与循环
 
Php for fe
Php for fePhp for fe
Php for fe
 
jQuery源码学习
jQuery源码学习jQuery源码学习
jQuery源码学习
 
lambda/closure – JavaScript、Python、Scala 到 Java SE 7
lambda/closure – JavaScript、Python、Scala 到 Java SE 7lambda/closure – JavaScript、Python、Scala 到 Java SE 7
lambda/closure – JavaScript、Python、Scala 到 Java SE 7
 
改善程序设计技术的50个有效做法
改善程序设计技术的50个有效做法改善程序设计技术的50个有效做法
改善程序设计技术的50个有效做法
 
JavaScript 教程
JavaScript 教程JavaScript 教程
JavaScript 教程
 
由Hash Set谈重用
由Hash Set谈重用由Hash Set谈重用
由Hash Set谈重用
 
潜力无限的编程语言Javascript
潜力无限的编程语言Javascript潜力无限的编程语言Javascript
潜力无限的编程语言Javascript
 
Closure
ClosureClosure
Closure
 
千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7
 
Php & Mysql
Php & MysqlPhp & Mysql
Php & Mysql
 
Asp.net mvc 培训
Asp.net mvc 培训Asp.net mvc 培训
Asp.net mvc 培训
 
Java多线程设计模式
Java多线程设计模式Java多线程设计模式
Java多线程设计模式
 
异步编程与浏览器执行模型
异步编程与浏览器执行模型异步编程与浏览器执行模型
异步编程与浏览器执行模型
 

Viewers also liked

支付宝浏览器与操作系统统计报告
支付宝浏览器与操作系统统计报告支付宝浏览器与操作系统统计报告
支付宝浏览器与操作系统统计报告Janlay Wu
 
Alipay Tracker
Alipay TrackerAlipay Tracker
Alipay TrackerJanlay Wu
 
Linked In Presentation
Linked In PresentationLinked In Presentation
Linked In Presentationonesharpdude
 
Life processes of living things
Life processes of living thingsLife processes of living things
Life processes of living thingsNatalia Fernández
 
Directorio general de ministros extraordinarios de la sagrada comunión
Directorio general de ministros extraordinarios de la sagrada comuniónDirectorio general de ministros extraordinarios de la sagrada comunión
Directorio general de ministros extraordinarios de la sagrada comuniónJorge Garcés
 
JavaScript Loop: Optimization of Weak Typing
JavaScript Loop: Optimization of Weak TypingJavaScript Loop: Optimization of Weak Typing
JavaScript Loop: Optimization of Weak TypingJanlay Wu
 
Realidad del presupuesto ucla 2016
Realidad del presupuesto ucla 2016Realidad del presupuesto ucla 2016
Realidad del presupuesto ucla 2016Álvaro Muñoz
 

Viewers also liked (15)

支付宝浏览器与操作系统统计报告
支付宝浏览器与操作系统统计报告支付宝浏览器与操作系统统计报告
支付宝浏览器与操作系统统计报告
 
Air
AirAir
Air
 
Alipay Tracker
Alipay TrackerAlipay Tracker
Alipay Tracker
 
Linked In Presentation
Linked In PresentationLinked In Presentation
Linked In Presentation
 
Halloween
HalloweenHalloween
Halloween
 
AQUA TAP
AQUA TAPAQUA TAP
AQUA TAP
 
англия
англияанглия
англия
 
Англия
АнглияАнглия
Англия
 
Life processes: Animals
Life processes: AnimalsLife processes: Animals
Life processes: Animals
 
Life processes of living things
Life processes of living thingsLife processes of living things
Life processes of living things
 
Revision
RevisionRevision
Revision
 
Directorio general de ministros extraordinarios de la sagrada comunión
Directorio general de ministros extraordinarios de la sagrada comuniónDirectorio general de ministros extraordinarios de la sagrada comunión
Directorio general de ministros extraordinarios de la sagrada comunión
 
JavaScript Loop: Optimization of Weak Typing
JavaScript Loop: Optimization of Weak TypingJavaScript Loop: Optimization of Weak Typing
JavaScript Loop: Optimization of Weak Typing
 
Intro Landscapes
Intro LandscapesIntro Landscapes
Intro Landscapes
 
Realidad del presupuesto ucla 2016
Realidad del presupuesto ucla 2016Realidad del presupuesto ucla 2016
Realidad del presupuesto ucla 2016
 

Similar to JavaScript 闭包分享(一):传递参数

JavaScript Advanced Skill
JavaScript Advanced SkillJavaScript Advanced Skill
JavaScript Advanced Skillfirestoke
 
學好 node.js 不可不知的事
學好 node.js 不可不知的事學好 node.js 不可不知的事
學好 node.js 不可不知的事Ben Lue
 
Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫
Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫
Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫Justin Lin
 
Javascript autoload
Javascript autoloadJavascript autoload
Javascript autoloadjay li
 
Ecma script edition5-小试
Ecma script edition5-小试Ecma script edition5-小试
Ecma script edition5-小试lydiafly
 
J2ee面试知识
J2ee面试知识J2ee面试知识
J2ee面试知识yiditushe
 
《Java程序设计》期末考试试题 (六)
《Java程序设计》期末考试试题 (六)《Java程序设计》期末考试试题 (六)
《Java程序设计》期末考试试题 (六)jane2006
 
Mybatis学习培训
Mybatis学习培训Mybatis学习培训
Mybatis学习培训flynofry
 
Kissy component model
Kissy component modelKissy component model
Kissy component modelyiming he
 
所谓闭包
所谓闭包所谓闭包
所谓闭包youzitang
 
107个常用javascript语句 oss 计算技术 - ossez info of tech
107个常用javascript语句   oss 计算技术 - ossez info of tech107个常用javascript语句   oss 计算技术 - ossez info of tech
107个常用javascript语句 oss 计算技术 - ossez info of techYUCHENG HU
 
Android resource-management
Android resource-managementAndroid resource-management
Android resource-managementLucas Xu
 
PHP Coding Standard and 50+ Programming Skills
PHP Coding Standard and 50+ Programming SkillsPHP Coding Standard and 50+ Programming Skills
PHP Coding Standard and 50+ Programming SkillsHo Kim
 
千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7javatwo2011
 
Spring 2.x 中文
Spring 2.x 中文Spring 2.x 中文
Spring 2.x 中文Guo Albert
 
前端开发之Js
前端开发之Js前端开发之Js
前端开发之Jsfangdeng
 

Similar to JavaScript 闭包分享(一):传递参数 (20)

JavaScript Advanced Skill
JavaScript Advanced SkillJavaScript Advanced Skill
JavaScript Advanced Skill
 
學好 node.js 不可不知的事
學好 node.js 不可不知的事學好 node.js 不可不知的事
學好 node.js 不可不知的事
 
Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫
Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫
Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫
 
Javascript autoload
Javascript autoloadJavascript autoload
Javascript autoload
 
Ecma script edition5-小试
Ecma script edition5-小试Ecma script edition5-小试
Ecma script edition5-小试
 
Js培训
Js培训Js培训
Js培训
 
J2ee面试知识
J2ee面试知识J2ee面试知识
J2ee面试知识
 
《Java程序设计》期末考试试题 (六)
《Java程序设计》期末考试试题 (六)《Java程序设计》期末考试试题 (六)
《Java程序设计》期末考试试题 (六)
 
Mybatis学习培训
Mybatis学习培训Mybatis学习培训
Mybatis学习培训
 
Kissy component model
Kissy component modelKissy component model
Kissy component model
 
所谓闭包
所谓闭包所谓闭包
所谓闭包
 
107个常用javascript语句 oss 计算技术 - ossez info of tech
107个常用javascript语句   oss 计算技术 - ossez info of tech107个常用javascript语句   oss 计算技术 - ossez info of tech
107个常用javascript语句 oss 计算技术 - ossez info of tech
 
前端测试
前端测试前端测试
前端测试
 
前端测试
前端测试前端测试
前端测试
 
Android resource-management
Android resource-managementAndroid resource-management
Android resource-management
 
PHP Coding Standard and 50+ Programming Skills
PHP Coding Standard and 50+ Programming SkillsPHP Coding Standard and 50+ Programming Skills
PHP Coding Standard and 50+ Programming Skills
 
千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7
 
Sun java
Sun javaSun java
Sun java
 
Spring 2.x 中文
Spring 2.x 中文Spring 2.x 中文
Spring 2.x 中文
 
前端开发之Js
前端开发之Js前端开发之Js
前端开发之Js
 

JavaScript 闭包分享(一):传递参数