js闭包

网友投稿 596 2022-09-06

js闭包

js闭包

运行上面的代码,i始终是btns.length+1

改进:

如何产生闭包:

当一个嵌套的内部(子)函数引用了嵌套的外部(父)函数的变量(函数)时,就产生了闭包.

使用chrome调试查看

理解一:闭包是嵌套的内部函数

理解二:包含被引用变量(函数)的对象

注意:闭包存在于嵌套的内部函数中

常见的闭包使用形式:

1.将函数作为另一个函数的返回值

function fn1() { var num=10; function fn2(){ num++; console.log(num); } return fn2;}var f=fn1();f();//11

f();//12

2.将函数的形参作为实参传递给另一个函数调用.

//大的函数中包含小的函数,小函数中引入了大函数的变量,就形成了闭包function logMsgDelay(msg,time) { setTimeout(function () { console.log(msg); },time);}logMsgDelay('老石',1000);

function myTool(){ var money=1000; //提供操作私有函数的操作 function get(){ money*=10; console.log('总资产:'+money+'元'); } function send(){ money--; console.log('花了一笔钱,总资产:'+money+'元'); } return { 'get':get, 'send':send };}

调用:

另一种写法:

(function(w){ var money=1000; function get(){ money*=10; console.log('总资产:'+money+'元'); }; function send(){ money--; console.log('花了一笔钱,总资产:'+money+'元'); } w.myTool={ 'get':get, 'send':send }})(window)

myTool.get(); myTool.send();

高级排他:

Title

实现函数节流:

var timer = null; window.onresize = function () { clearTimeout(timer); timer = setTimeout(function () { console.log('输出的内容!!!!'); }, 200); }

内存泄露:

02_内存溢出与内存泄露

构造函数设置属性和方法

// 静态属性, 静态方法 // 绑定在函数身上, 一定要注意: 函数本质也是一个对象, 既然是个对象, 那么就可以动态的添加属性和方法 // 只要函数存在, 那么绑定在它身上的属性和方法, 也会一直存在 // 想要记录总共创建了多少个人?

function Person(name, age, doFunc) { this.name = name; this.age = age; this.doFunc = doFunc; if (!Person.personCount) { Person.personCount = 0; } Person.personCount++; } Person.printPersonCount = function () { console.log('总共创建了'+ Person.personCount + '个人'); }; var p1 = new Person('sz', 18, function () { console.log('sz在上课'); }); var p2 = new Person('王二小', 18, function () { console.log('王二小在放羊'); }); console.log(p1.name); console.log(p1.age); p1.doFunc(); console.log(p2.name); console.log(p2.age); p2.doFunc(); Person.printPersonCount();

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:优化 SQL SELECT 语句性能的 6 个简单技巧(优化营商环境条例)
下一篇:HDU4252 A Famous City
相关文章

 发表评论

暂时没有评论,来抢沙发吧~