微信扫一扫打赏支持

js模仿块级作用域(js没有块级作用域私有作用域)

js模仿块级作用域(js没有块级作用域私有作用域)

一、总结

1、js没有块级作用域在for循环中定义的i,出了for循环还是有这个i变量

2、js可以模拟块级作用域用立即执行的匿名函数:(匿名函数)():这里是匿名函数中的循环:而匿名函数的作用将所在函数(匿名函数做在的函数)的局部变量常驻内存

3、区别块级作用域(私有作用域:循环),局部变量(函数),全局变量不是说js没有局部变量,局部变量是对函数而言,块级作用域是对循环(比如for循环)而言

 

 

二、js模仿块级作用域(js没有块级作用域,js没有私有作用域)

模仿块级作用域

块级作用域又叫私有作用域,但是JS没有块级作用域的概念;这意味着在块语句(比如for语句)中定义的变量,不会因为离开了for块就失效

  • 使用了块级作用域后,匿名函数中定义的任何变量,都会在执行结束时被销毁;
  • 一般来说,我们都应该尽可能少向全局作用域中添加变量和函数;过多的全局变量和函数很容易导致命名冲突
  • 使用块级作用域,每个开发者既可以使用自己的变量,又不必担心搞乱全局作用域;
  • 在全局作用域中使用块级作用域可以减少闭包占用的内存问题.

 

三、代码

 1 <!DOCTYPE html>
 2 <html lang="zh-cn">
 3 <head>
 4   <meta charset="utf-8">
 5   <title>课堂演示</title>
 6 </head>
 7 <body>
 8   <script>
 9   /*
10   function myfun() {
11 
12     for(var i=0;i<5;i++){
13 
14     }  //i不会因为离开了for块就失效;
15 
16     var i; //重新声明后i还是5,
17 
18     alert(i)  //此时的i=5
19   }
20 */
21   
22    //模仿块级作用域
23    function myfun() {
24 
25     (function(){
26       for(var i=0;i<5;i++){
27           alert(i)  
28       } 
29     })()  // 这里定义并立即调用了一个匿名函数; 
30     
31 
32     alert(i) 
33  //此时的i已结不存在 会报错:'i is not defined'
34   }
35   myfun()
36   </script>
37 </body>
38 </html>

 

posted @ 2018-05-12 17:15  范仁义  阅读(280)  评论(0编辑  收藏  举报