javascript中的闭包概念与用法实践分析(2)

说明:当调用到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数学运算用法总结

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/9b874939fa21e303e1ed830f8739ac8b.html