JS闭包

闭包定义 闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。就是在另一个作用域中保存了一份它从上一级函数或者作用域得到的变量,而这些变量是不会随上一级函数的执行完成而销毁。 前提条件 计算机中的内存变量如果有被引用着的话,则系统是不会将之回收的。只要我们能够一直持有这个引用,则就可以令局部变量避免被回收——这是闭包概念成立的前提 闭包用途 可以读取到函数内部的变量 可以让函数内部变量保持在内存中 避免全局变量的污染 私有成员的存在 注意事项 闭包会让函数中的变量都被保存到内存中,内存消耗较大,不能滥用闭包,否则会导致性能和内存泄漏问题(退出函数之前可以将不用的局部变量全部删除) 闭包能改变父函内部变量的值,一定要小心使用 示例

for(var i = 0; i < 10; i++) {
	setTimeout(function() {
     console.log(i);  
 }, 100);
}
输出10次10
for(var i = 0; i < 10; i++) {
 	(function(e) {
        setTimeout(function() {
            console.log(e);  
        }, 100);
    })(i);
}
输出0-9


var name = "The Window";   
var object = {   
		name : "My Object",   
  		getNameFunc : function(){   
    	return function(){   
      	return this.name;   
   	};   
  }   
};   
console.log(object.getNameFunc()());  //The Window

var name = "The Window";   
var object = {   
  name : "My Object",   
  getNameFunc : function(){  
	 that = this;
   return function(){   
      return that.name;   
   };   
  }   
};   
console.log(object.getNameFunc()());  //The Window

参考:http://www.2cto.com/kf/201410/342609.html

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • JQuery事件处理

    Jquery事件 1、  绑定事件示例代码: <a href=”#”>绑定事件</a> <div style=”display:none;”> 什么是绑定事件?...

    苦咖啡
  • 删除数据前确定提醒

    有的时候我们会误删信息,如果我们编程员在编代码的时候有个提醒那样…… 下面可能就是你要用的方法: <script language=”javascript”>...

    苦咖啡
  • 图片无缝上下滚动

    今天要用到图片无缝滚动,在网上找了半天要么不能滚动,要么不能无缝。我最后找到了一个可以达到要求的代码,现在贴出来放便大家使用。我测试过的,可以使用。 <div ...

    苦咖啡
  • java static关键字

    葫芦
  • Babel下的ES6兼容性与规范

    ES6标准发布后,前端人员也开发渐渐了解到了es6,但是由于兼容性的问题,仍然没有得到广泛的推广,不过业界也用了一些折中性的方案来解决兼容性和开发体系问题,但大...

    IMWeb前端团队
  • Babel下的ES6兼容性与规范

    ES6标准发布后,前端人员也开发渐渐了解到了es6,但是由于兼容性的问题,仍然没有得到广泛的推广,不过业界也用了一些折中性的方案来解决兼容性和开发体系问题,但大...

    IMWeb前端团队
  • javascript冷知识

      如果放在数值前的话,对数值不会产生任何影响,不过放在其他的数据类型前面的话,就等于调用number()将他转为数字,布尔值false被转为0,ture被转为...

    嘿嘿嘿
  • QoS管理及CDN

    本文来自Content Delivery Summit 2020的线上会议,会议主要探讨了有关QoS(Quality of Service)管理以及CDN方面的...

    用户1324186
  • RunTime 之常规操作

    有关Runtime的知识总结,我本来想集中写成一篇文章的,但是最后发现实在是太长,而且不利于阅读,最后分成了如下几篇:

    進无尽
  • PHP7原生MySQL数据库操作实现代码

    PHP5中mysql_connect()等函数大多被PHP7中类的成员函数所代替。PHP5中连接mysql是过程性的,而PHP7中强调了类的使用与面向对象的方法

    砸漏

扫码关注云+社区

领取腾讯云代金券