闭包和函数声明那些事
来源:互联网 发布:mac book 安装idea 编辑:程序博客网 时间:2024/06/05 03:54
一、闭包
1.什么是闭包?
函数嵌套函数,内部的函数可以调用外部函数的变量和参数,因为内部引用了外部的变量和参数所以参数和变量都不会被垃圾回收机制所收回。
2.闭包有什么好处应用在哪里?
好处:1.希望一个变量长期驻扎在内存当中
2.避免全局变量的污染
3.私有化成员
用法:
1:模块化代码(如例子1)
2:再循环中直接找到对应元素的索引(例子2)
坏处:引发IE的内存泄漏问题当调用内部属性时内部属性的函数又调用外部变量时这样的首尾呼应会导致内存泄漏
例子1:
var aa=(function(){
var a=1;
function bbb(){
a++;
alert(a);
}
function ccc(){
a++;
alert(a);
}
return{
b:bbb,
c:ccc;
}
})();
aa.b();//2
aa.c();//3
例子2:
<script>
window.onload = function(){
var aLi = document.getElementsByTagName('li');
/*for(var i=0;i<aLi.length;i++){
(function(i){
aLi[i].onclick = function(){
alert(i);
};
})(i);
}*/
for(var i=0;i<aLi.length;i++){
(function(i){
aLi[i].onclick=function(){alert(i);}
})(i);这样每次点击相应的li都会弹出响应的索引值,因为现在弹出的i是长期驻扎在内存中的变量而不是循环多次i的变量
}
};
</script>
</head>
<body>
<ul>
<li>11111111111</li>
<li>11111111111</li>
<li>11111111111</li>
</ul>
二、函数声明和函数表达式
函数声明:function 函数名(){}
函数表达式:function 函数名:函数名是可写可不写(){}:命名函数表达式,匿名函数表达式
function aaa(){}:函数声明
var a=function aaa(){}:命名函数表达式
var a=function(){}:匿名函数表达式
(function aaa(){}):表达式
当加入位运算符如~function aaa(){};
1.函数表达式可以直接后面加括号执行,而函数声明是不可以的
2.函数声明可以被提前解析出来的也就是函数声明的预解析
function aaa(){alert(1)}();错误
var a=function aaa(){alert(1);}();这样可以直接执行
1.什么是闭包?
函数嵌套函数,内部的函数可以调用外部函数的变量和参数,因为内部引用了外部的变量和参数所以参数和变量都不会被垃圾回收机制所收回。
2.闭包有什么好处应用在哪里?
好处:1.希望一个变量长期驻扎在内存当中
2.避免全局变量的污染
3.私有化成员
用法:
1:模块化代码(如例子1)
2:再循环中直接找到对应元素的索引(例子2)
坏处:引发IE的内存泄漏问题当调用内部属性时内部属性的函数又调用外部变量时这样的首尾呼应会导致内存泄漏
例子1:
var aa=(function(){
var a=1;
function bbb(){
a++;
alert(a);
}
function ccc(){
a++;
alert(a);
}
return{
b:bbb,
c:ccc;
}
})();
aa.b();//2
aa.c();//3
例子2:
<script>
window.onload = function(){
var aLi = document.getElementsByTagName('li');
/*for(var i=0;i<aLi.length;i++){
(function(i){
aLi[i].onclick = function(){
alert(i);
};
})(i);
}*/
for(var i=0;i<aLi.length;i++){
(function(i){
aLi[i].onclick=function(){alert(i);}
})(i);这样每次点击相应的li都会弹出响应的索引值,因为现在弹出的i是长期驻扎在内存中的变量而不是循环多次i的变量
}
};
</script>
</head>
<body>
<ul>
<li>11111111111</li>
<li>11111111111</li>
<li>11111111111</li>
</ul>
二、函数声明和函数表达式
函数声明:function 函数名(){}
函数表达式:function 函数名:函数名是可写可不写(){}:命名函数表达式,匿名函数表达式
function aaa(){}:函数声明
var a=function aaa(){}:命名函数表达式
var a=function(){}:匿名函数表达式
(function aaa(){}):表达式
当加入位运算符如~function aaa(){};
1.函数表达式可以直接后面加括号执行,而函数声明是不可以的
2.函数声明可以被提前解析出来的也就是函数声明的预解析
function aaa(){alert(1)}();错误
var a=function aaa(){alert(1);}();这样可以直接执行
0 0
- 闭包和函数声明那些事
- (javascript)浅析js函数表达式和函数声明以及闭包
- js函数--函数声明;函数表达式;闭包
- 函数表达式和函数声明/()是一个分组操作符/Module模式/匿名闭包/克隆/function的执行
- 总结函数声明提升,闭包,作用域,this
- Item 5:那些被C++默默地声明和调用的函数 Effective C++笔记
- 函数和闭包
- 函数和函数闭包
- 函数声明和定义
- 函数声明和调用
- 函数声明和函数表达式
- 函数表达式 和函数声明
- 函数声明和函数表达式
- 函数表达式和函数声明
- 函数声明和函数表达式
- 函数声明和函数表达式
- 函数声明和函数表达式
- 函数声明和函数表达式
- OJ.坐公交
- SpringMVC学习(1)--模型2之Servlet
- Gradle 1.12用户指南翻译——第五十一章. 发布构件
- JsBridge与客户端交互
- NOIP2016 Day1 玩具谜题
- 闭包和函数声明那些事
- Sublime text 3 [Decode error - output not utf-8]或者[Decode error - output not gbk] 解决方法
- paper-7 - FEP: High Fidelity Experiment Platform for Mobile Internet
- 第16周项目1 -(5)归并排序
- 数据结构::二叉树的非递归实现
- HTML入门
- 汇编看函数调用过程
- Android下低功耗蓝牙使用的部分说明
- Dlib库中实现正脸人脸关键点(landmark)检测的测试代码