理解和熟知概念JavaScript的作用域和块级作用域
作用域永远都是任何一门编程语言中的重中之重,因为它控制着变量与参数的可见性与生命周期。讲到这里,首先理解两个概念:块级作用域与函数作用域。
什么是块级作用域呢?
任何一对花括号({和})中的语句集都属于一个块,在这之中定义的所有变量在代码块外都是不可见的,我们称之为块级作用域。
函数作用域就好理解了(*^__^*) ,定义在函数中的参数和变量在函数外部是不可见的。
大多数类C语言都拥有块级作用域,JS却没有。请看下文demo:
//C语言 #includevoid main() { int i=2; i--; if(i) { int j=3; } printf("%d/n",j); }
运行这段代码,会出现“use an undefined variable:j”的错误。可以看到,C语言拥有块级作用域,因为j是在if的语句块中定义的,因此,它在块外是无法访问的。
而JS是如何表现的呢,再看另一个demo:
functin test(){ for(var i=0;i<3;i++){ } alert(i); } test();
运行这段代码,弹出"3",可见,在块外,块中定义的变量i仍然是可以访问的。也就是说,JS并不支持块级作用域,它只支持函数作用域,而且在一个函数中的任何位置定义的变量在该函数中的任何地方都是可见的。
那么我们该如何使JS拥有块级作用域呢?是否还记得,在一个函数中定义的变量,当这个函数调用完后,变量会被销毁,我们是否可以用这个特性来模拟出JS的块级作用域呢?看下面这个DEMO:
function test(){ (function (){ for(var i=0;i<4;i++){ } })(); alert(i); } test();
这时候再次运行,会弹出"i"未定义的`错误,哈哈,实现了吧~~~这里,我们把for语句块放到了一个闭包之中,然后调用这个函数,当函数调用完毕,变量i自动销毁,因此,我们在块外便无法访问了。
JS的闭包特性is the most important feature((*^__^*) 大家懂的)。在JS中,为了防止命名冲突,我们应该尽量避免使用全局变量和全局函数。那么,该如何避免呢?不错,正如上文demo所示,我们可以把要定义的所有内容放入到一个
(function (){ //内容 })();
之中,这时候,我们是不是相当于给它们的外层添加了一个函数作用域呢?该作用域之外的程序是无法访问它们的。
-
生态性环艺设计发展的趋势
生态设计,也可以称作绿色设计或者生命周期设计或者环境设计。生态设计是指在设计过程中,遵从本地化、节约化、自然化等原则,尽最大可能考虑到环境因素,减少对环境的危害,实现设计的可持续性和再循环。下面是本站小编整理的生态性环艺设计发展的趋势相关内容,希望对你...
-
专升本excel模拟题附答案
想要考试取得好成绩,平时就需要按照"循序渐进、阶段侧重、精讲精练"的原则进行练习。下面是小编为大家整理的专升本excel模拟题附答案,欢迎参考!1、在Excel2003中,数据清单是工作表中______。A:没有空行的区域B:没有空列的区域C:任何区域D:没有空行和空列的区域答案:D2...
-
什么样的网站需要seo优化
seo优化是网站运营当中最为核心的内容,想要进行诸多网站的优化,大家通常采用的方法就是这种最核心的方式。那么,什么样子的网站需要seo优化呢?以下是本站小编搜索整理的相关内容,供参考阅读,希望对大家有所帮助!想了解更多相关信息请持续关注我们应届毕业生培训网!...
-
家居橡胶木家具的优缺点盘点
在家庭装修中橡胶木家具我们经常需要用到,下面是YJBSY小编整理的橡胶木家具的优缺点相关内容,希望对你有帮助!橡胶木家具的优点1、橡胶木家具在制作过程中的可塑性不错,因此可以适合制作造型优美,曲线柔和的产品。2、橡胶木实木质感好,纹理优美、质地均匀。3、色泽...