JS闭包解析
参考文章 : 深入理解JS闭包
正常来说,函数内定义的变量是私有变量,函数外部无法获取,但是闭包是指有权访问另一个函数作用域中的变量的函数。
function aa(){ var name = 'lihua'; return function bb(){ return name; } } function bb(){ var cc = aa(); console.log(cc()); } bb(); ---- function f1(){ var n=999; nAdd=function(){n+=1} //没有定义 var 是全部变量 function f2(){ alert(n); } return f2; } var result=f1(); result(); // 999 nAdd(); result(); ----- //闭包可以用在许多地方。它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。 function f1(){ var n=999; function nAdd(){ n+=1; console.log(n); } return nAdd; } var result=f1(); result(); //1000 result(); //1001 result(); //1002 ========== var name = "The Window"; var object = { name : "My Object", getNameFunc : function(){ return function(){ return this.name; }; } }; console.log(object.getNameFunc()()); ------ var name = "The Window"; var object = { name : "My Object", getNameFunc : function(){ var that = this; return function(){ return that.name; }; } }; alert(object.getNameFunc()()); =========== var sum =10 function add() { var sum = 0; function operation() { return sum = sum ? sum + 1 : 1; } return operation } var a = add(); console.log(a()); console.log(a());//2 console.log(a());//3 console.log(a());//4 a = null; // a = add(); console.log(a());//1 ---------------------
深入理解JS闭包 [https://blog.csdn.net/cauchy6317/article/details/81167572]
链接:https://www.nowcoder.com/questionTerminal/da4115e308c948169a9a73e50d09a3e7
现有如下html结构 <ul> <li>click me</li> <li>click me</li> <li>click me</li> <li>click me</li> </ul> 运行如下代码: var elements=document.getElementsByTagName('li'); var length=elements.length; for(var i=0;i<length;i++){ elements[i].onclick=function(){ alert(i); } } 依次点击4个li标签,哪一个选项是正确的运行结果()? 依次弹出1,2,3,4 依次弹出0,1,2,3 依次弹出3,3,3,3 依次弹出4,4,4,4 var elements=document.getElementsByTagName('li'); var length=elements.length; for(var i=0;i<length;i++){ elements[i].onclick=function(num){ return function() { alert(num); }; }(i); } ---------------------