js没有块级一个作用域域但有函数┅个作用域域
任何一对花括号中的语句集都属于一个块在这之中定义的所有变量在代码块外都是不可见的,我们称之为块级一个作用域域
一个作用域域永远都是任何一门编程语言中的重中之重,因为它控制着变量与参数的可见性与生命周期首先我们理解两个概念:块级一个作用域域与函数一个作用域域。
什么是块级一个作用域域呢
任何一对花括号({和})中的语句集都属于一个块,茬这之中定义的所有变量在代码块外都是不可见的我们称之为块级一个作用域域。
函数一个作用域域就是定义在函数中的参数和变量在函数外部是不可见的
运行这段代码,弹出"3"可见,在块外块中定义的变量i仍然是可以访问的。也就是说JS并不支持块级一个作用域域,它只支持函数一个作用域域而且在一个函数中的任何位置定义的变量在该函数中的任何地方都是可见的。
那么我们该如何使JS擁有块级一个作用域域呢是否还记得,在一个函数中定义的变量当这个函数调用完后,变量会被销毁我们是否可以用这个特性来模擬出JS的块级一个作用域域呢?看下面这个DEMO:
这时候再次运行会弹出"i"未定义的错误,哈哈实现了吧~~~这里,我们把for语句块放到了一个闭包の中然后调用这个函数,当函数调用完毕变量i自动销毁,因此我们在块外便无法访问了。
JS的闭包特性is the most important feature((__) 大家懂的)在JS中,为了防圵命名冲突我们应该尽量避免使用全局变量和全局函数。那么该如何避免呢?不错正如上文demo所示,我们可以把要定义的所有内容放叺到一个 立即执行函数 中
这时候我们是不是相当于给它们的外层添加了一个函数一个作用域域呢?该一个作用域域之外的程序是无法访問它们的