js:进一步关闭(范围:下一个)
function fn1(){
//创建一个数组
var fns = new Array();
//i这个变量是保存在fn1这个作用域中
for(var i=0;i<10;i++){
//数组中的值是一组函数
fns[i] = function(){
return i;
}
}
return fns;
}
var fs = fn1();
for(var i=0;i<fs.length;i++){
//此时通过闭包来调用全部的函数,当要输出i的时候会在它所在的定义域(fn1)中找到它,
//此时它已变为10。所以连续输出了10个10
console.log(fs[i]());
} //输出:10
---------------------------解决方式------------------------------
function fn1(){
//创建了一个数组
var fns = new Array();
//i这个变量是保存在fn1这个作用域中
for(var i=0;i<10;i++){
//num这个变量保存在tf作用域。每个闭包的num都是不一样的
//所以此时所消耗的内存较大。
var tf = function(num){
fns[num] = function(){
return num;
}
}
tf(i);
}
return fns;
}
var fs = fn1();
for(var i=0;i<fs.length;i++){
//
console.log(fs[i]());
} //输出:0 ~ 9
---------------------------块作用域------------------------------
for(var i=0;i<10;i++){
}
//在js中没有块作用域。无论是使用循环还是推断之后,这个变量一直存在
/**
* 所以当在全局使用某个变量进行循环或推断之后,这个变量可能会影响到函数的变量,所以
* 所以在特殊情况下不要使用全局变量。并且全局变量在作用域链的最上层。訪问是最慢的。
*/
console.log(i);
function fn1(){
console.log(i);
}
fn1();
/**
* 在一个团队进行开发中,可能会涉及到定义同名的全局变量,所以在开发中要养成一个好习惯:
* 将全局变量代码放到一个匿名函数。而且立即调用匿名函数,这样也能够运行全局变量的代码。
* 可是这些变量被控制在开发者想要控制的作用域中。
*/
解决的方法:将块作用域定义在一个匿名函数中。
(function(){
for(var i=0;i<10;i++){
}
})(); //在function的{}后不能直接调用。一定要加把匿名函数放在()内再运行。
---------------------------私有变量------------------------------
function Person(name){
/**
*此时没有办法直接訪问name这个属性,由于没有this.name,
*要訪问name仅仅能通过this.getName获取。通过this.setName设置
*/
this.setName = function(value){
name = value;
}
this.getName = function(){
return name;
}
}
var p = new Person("zhang"); //zhang
console.log(p.getName());
p.setName("li");
console.log(p.getName()); //li
/**可是使用这样的方式创建私有变量带来的问题是每一个对象要存储大量函数。
* 解决办法是通过静态私有变量来解决。
*/
---------------------------解决方式------------------------------
var Person;
(function(){
//name在函数结束之后就消失,在外面无法使用
var name = "";
Person = function(value){
name = value;
}
Person.prototype.setName = function(value){
name = value;
}
Person.prototype.getName = function(){
return name;
}
})();
var p1 = new Person("aaa"); //aaa
console.log(p1.getName());
p1.setName("bbb"); //bbb
console.log(p1.getName());
原创文章如转载。请注明出处,本文首发于csdn站点:http://blog.csdn.net/magneto7/article/details/25459099
版权声明:本文博客原创文章。博客,未经同意,不得转载。
js:进一步关闭(范围:下一个)的更多相关文章
- 一个js程序:离下一个圣诞节还有多少天?
话不多说上代码: //离下一个圣诞节还有多少天 var christ=new Date(); christ.setMonth(11); christ.setDate(25); var year=now ...
- JS window对象 返回下一个浏览的页面 forward()方法,加载 history 列表中的下一个 URL。
返回下一个浏览的页面 forward()方法,加载 history 列表中的下一个 URL. 如果倒退之后,再想回到倒退之前浏览的页面,则可以使用forward()方法,代码如下: window.hi ...
- js获取上一个月、下一个月格式为yyyy-mm-dd的日期
/** * 获取上一个月 * * @date 格式为yyyy-mm-dd的日期,如:2014-01-25 */ function getPreMonth(date) { var arr = date. ...
- js jquery获取当前元素的兄弟级 上一个 下一个元素
原博地址:http://www.jb51.net/article/71782.htm var chils= s.childNodes; //得到s的全部子节点 var par=s.parentNod ...
- JS/JQuery获取当前元素的上一个/下一个兄弟级元素等元素的方法
$(function(){ //遍历获取的input元素对象数组,绑定click事件 var len = $("input[type='file']").length; ; i & ...
- js jquery获取当前元素的兄弟级 上一个 下一个元素 jquery如何获取第一个或最后一个子元素
var chils= s.childNodes; //得到s的全部子节点 var par=s.parentNode; //得到s的父节点 var ns=s.nextSbiling; //获得 ...
- JS 如何获取当前上一个月、下一个月和月份所含天数
在数据报表查询中,经常需要设置查询的日期区间,如查询2018-02-01至2018-02-28的整月数据,这时需要提供快捷整月查询按钮: 如: 一般日期年月日之间由"-"或者&qu ...
- 用CSS画小猪佩奇,你就是下一个社会人! js将“I am a coder”反转成 “coder a am I”,不许用split,join,subString,reverse;求解方法三
用CSS画小猪佩奇,你就是下一个社会人! 欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 作者:江志耿 | 腾讯TEG网络工程师 我是佩奇,哼,这是我的弟弟乔治,呱呱,这是我的妈妈,嚯 ...
- js,onblur后下一个控件获取焦点判断、html当前活跃控件、jquery版本查看、jquery查看浏览器版本、setTimeout&setInterval
需求: input控件在失去焦点后直接做验证,验证通不过的话,显示相应错误.但是如果失去焦点后点击的下个控件是比较特殊的控件(比如,退出系统),那么不执行验证操作,直接退出系统(防止在系统退出前,还显 ...
随机推荐
- 14.10.1 InnoDB Disk I/O
14.10 InnoDB Disk IO and File Space Management InnoDB 磁盘IO和文件空间管理: 14.10.1 InnoDB Disk I/O 14.10.2 F ...
- 关于Smartforms换页的
smartforms中有系统变量SFSY-PAGE是总页码,SFSY-FORMPAGES是当前页,可以最后的窗体中做个判断 1.把窗体设置成最终窗体 2.新增一个命令,当前页等于最后一页才输出改内容, ...
- Servlet过滤器——过滤器分析流量
1.概述 Servlet过滤器可以对用户提交的数据或服务器返回的数据进行更改.任何到达服务器的请求都会首先经过过滤器的处理.本实例应用过滤器的这个特点,编写了一个在过滤器中统计网站流量的实例. 本实例 ...
- TObject简要说明-对象的创建流程
TObject = class //创建 constructor Create; //释放 procedure Free; //初始化实列 class functi ...
- 显示器 Linux 性能 18 (一个命令行工具传递)
对于系统和网络管理员来说每天监控和调试Linux系统的性能问题是一项繁重的工作.在IT领域作为一名Linux系统的管理员工作5年后,我逐渐认识到监控和保持系统启动并执行是多么的不easy.基于此原因. ...
- 无比奇怪的问题,Runtime报错,程序仍可运行(有可能是线程崩溃,但主程序不崩溃,线程崩溃可能是因为锁使用不当引起的)
但主界面仍可操作. 我估计是,线程运行崩溃,不影响主界面的运行(如果你不去点击那个确认错误的对话框的话). 仔细分析,我估计是使用锁不当引起的.有2种情况下必崩溃: 1. 对没有上锁的锁进行解锁 2. ...
- 根据图像路径,创建CBitmap对象的方法
因为项目的关系,需要根据图像路径,创建CBitmap对象.起初查资料找到了LoadBitmap这个函数,根据CSDN得 BOOL LoadBitmap ( LPCTSTR lpszResourceNa ...
- 七个你无法忽视的Git使用技巧(转)
与其他技术相比,Git应该拯救了更多开发人员的饭碗.只要你经常使用Git保存自己的工作,你就一直有机会可以将代码退回到之前的状态,因此就可以挽回那些你深夜里迷迷糊糊犯下的错误. 尽管这么说,Git的命 ...
- 同步linux服务器的时间
1:看系统时间的时候发现有点儿误差,大概在2分钟左右. 于是想自动同步系统的时间. 2:找到ntpdate命令,没有就安装.debian(apt-get install ntpdate) 3:获取时间 ...
- uva 10196 Check The Check
题目:10196 - Check The Check 思路:水题..模拟 这个代码,前半部分是在数统机房上课的时候写的,挫了点,懒得改了. #include <cstdio> #inclu ...