博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
模仿块级作用域
阅读量:5262 次
发布时间:2019-06-14

本文共 924 字,大约阅读时间需要 3 分钟。

由于JavaScript没有块级作用域的概念。这意味着在块语句中定义的变量,实际上是在包含函数中而非语句中创建的,

1 function outputNumbers(count){2   for(var i=0;i

这个函数中定义了一个for循环,而变量i的初始值被设置为0.在Java C++等语言中,变量i只会在for循环的语句块中有定义,循环一旦结束,变量就会被销毁。

在JavaScript中,变量i是定义在outputNumbers()的活动对象中的,因此从它有定义开始,就可以在函数内随处访问它。即使像下面这样错误地重新声明同一个变量,也不会改变它的值。

1 function outputNumbers(count){2   for(var i=0;i

因为JavaScript 会对后续声明视而不见;通过闭包的方式来模仿块级作用域,来避免这样的问题。

1 function outputNumbers(count){ 2   (function(){ 3      for(var i=0;i

这种有哪些优点:

  如果希望定义一些私有变量的时候,可以使用这种方式来定义,在全局作用域中应用得比较都,一般用在外部函数中,这样避免往全局中添加过多的变量,函数。一般来说,我们应该尽量避免在全局作用域中过度添加变量,在大型中的项目中,过多的变量和函数容易导致命名冲突。这样的话,每个开发人员就可以定义自己的变量,又不会与全局变量影响。

1   (function(){2     var now = new Date();3     if(now.getMonth()==0 && now.getDate()==1){4       alert("Happy new year");5     }6   })();

  把上面代码放在全局作用域中,可以确定那一天是1月1日;如果到了就会像用户输出 Happy new year;

这种做法可以减少闭包占用的内存问题,因为没有指向匿名函数的引用,只要函数执行完成,就立即销毁其作用域链。

转载于:https://www.cnblogs.com/czhyuwj/p/5636190.html

你可能感兴趣的文章
软件开发与模型
查看>>
Codeforces Round #306 (Div. 2) A
查看>>
161017、SQL必备知识点
查看>>
hdu 1541Stars
查看>>
kill新号专题
查看>>
MVC学习系列——Model验证扩展
查看>>
C# GC 垃圾回收机制
查看>>
mysqladmin 修改和 初始化密码
查看>>
字符串
查看>>
vue2.x directive - 限制input只能输入正整数
查看>>
实现MyLinkedList类深入理解LinkedList
查看>>
自定义返回模型
查看>>
使用Git、Git GUI和TortoiseGit
查看>>
C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 客户端多网络支持
查看>>
阴影:box_shadow
查看>>
HDU 4122
查看>>
Suite3.4.7和Keil u3自带fx2.h、fx2regs.h文件的异同
查看>>
asp.net的图片、文件上传
查看>>
常用正则
查看>>
Android网络之数据解析----使用Google Gson解析Json数据
查看>>