说明:当调用到person.getColorFun1()的时候,在全局变量中生成一个函数function(){return this.color},此时的this指向是window,所以执行到person.getColorFun1()()的时候,color为window对象下的变量color为black
而在person.getColorFun2函数中用that保存了当前对象person,而在闭包函数里面return出去的color是person的color,所以执行完person.getColorFun2()()的时,color是yellow。
实践四:闭包的高级应用
示例1:实现函数节流
window.onresize = throttle(function(){ var width = window.innerWidth || document.documentElement.clientWidth; console.log(width); },300); // 调节浏览器窗口,在松手后的0.3s后执行 function throttle(fn,delay) { var timer = null; return function() { clearTimeout(timer); timer = setTimeout(fn,delay); } }
示例2:实现封装对象
var Person = (function(){ var haha = 0; // 这里表示可以定义一能够使用到的参数 return function(name, age){ ++ haha; // 这里表示去使用定义到的参数,虽然在此处并没有实际意义。 this.name = name; this.age = age; }; })(); Person.prototype = { say : function(){ console.log(this.name + ' say hi'); } } var p1 = new Person('zhang san', 10); var p2 = new Person('li si', 20); console.log(p1.name); // zhang san p1.say(); // zhang san say hi p2.say(); // li si say hi
感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:测试上述代码运行效果。
更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》