闭包

1.什么是闭包

函数嵌套函数,内部函数可以引用外部的参数和变量,参数和变量不会被垃圾回收机制所收回,外部函数最终返回内部函数的函数名。

从垃圾回收机制来看,一个闭包就是当一个函数返回时,一个没有释放资源的栈区。

例如:

 1 function test(num){
 2         var sum=5;
 3         function alertSum(){
 4             sum+=num;
 5             alert(sum);
 6         }
 7             return alertSum;
 8     }
 9     var a=test(5);
10     a();//10

2.闭包的作用,应用在哪里

  • 好处

    1.希望一个变量长期驻扎在内存中

    2.避免全局变量的污染

    3.私有成员的存在,保护内部变量不被外部调用

  • 实际用法:

    1.模块化代码,减少全局变量污染。

 1 (function(){ 2 //模块化代码 3 })() 

2.在循环中不用设置index直接找到对应元素的索引。

1 var aBtn = document.getElementsByTagName('button');
2   for(var i = 0; i < aBtn.length; i++){
3       (function(i){
4           aBtn[i].onclick=function(){
5               //do something
6           }
7       })(i);
8   }

顺便说一下return

当在 <a href="abc.htm" onclick="return add_onclick()">Open</a> 中
如果函数 add_onclick() 返回 true, 那么 页面就会打开 abc.htm
否则, (返回 false), 那么页面不会跳转到 abc.htm, 只会执行你的 add_onclick() 函数里的内容. (add_onclick函数中控制页面转到 abc.htm除外

)
而 <a href="abc.htm" onclick="add_onclick()">Open</a>
不管 add_onclick() 返回什么值, 都会在执行完 add_onclick 后打开页面 abc.htm

另外补充:
onclick事件时就相当于onclick="return true/false"
例:

 1 function check()
 2 {
 3 if(obj.value=="" )
 4    {
 5      window.alert("不能为空!");
 6      obj.focus();
 7      return false;
 8    }
 9      return true;
10 }

调用方法返回true时才提交表单,反之则不提交,这是submit按钮

原文地址:https://www.cnblogs.com/colaman/p/6230758.html