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

15
JavaScript 闭闭闭闭 ( ) 闭闭 闭闭闭 [email protected]

description

本期介绍了JS中闭包的概念、参数传递和测试变量可用性的问题。

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

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

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

[email protected]

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

闭包的结构

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

常见结构:独立语句(function() {

// your code...})();

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

常见结构:表达式(缓存示例)

var get = function() {

var cache = {};

return function(selector) {

if(cache.hasOwnProperty(selector)) return selector.cache;

return cache.selector = D.query(selector);

};

}();

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

闭包的优点天然的安全性

◦var => private逻辑相对独立函数式编程的优势

◦延迟计算◦概念简单易懂◦变化多端

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

闭包的参数传递

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

回顾:(function() {

// your code...})();

(function($) {$(function() {

// code on DOMReady…});

})(jQuery);

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

传递常见引用:示例(function(w, d) {

// w.setTimeout(…// d.getElementById(…

})(window, document);

(function(win, doc) {// win.setTimeout(…// doc.getElementById(…

})(window, document);

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

传递常见引用:优点特定范围内的作用域快捷引用减少压缩后字节数更好的代码混淆

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

传递常见引用:缺点长时间持有对window的引用,导致特定场景下的跨域冲突

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

传递“无引用”:示例(function(undefined) {

// if(typeof window.Tracker === undefined) {

// …})();

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

传递“无引用”:优点安全地使用 undefined快捷引用减少压缩后字节数更好的代码混淆

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

传递“无引用”:缺点暂时没有,推荐使用

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

比较:测试变量 /对象是否可用if(myVar)if(window.myVar)if(!!myVar)if(typeof myVar !== ‘undefined’)if(typeof myVar !== undefined)if(myObj.myVar)if(myObj.hasOwnProperty(‘myVar’)if(typeof myObj.myVar !== undefined)

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

THNAKS

Q & A