zoukankan      html  css  js  c++  java
  • javascript块级作用域

    c/java中,拥有块级作用域的概念,大括号内就是一个块级作用域,在块级作用域内声明的变量,块以外不可见。

    C语音的块级作用域示例如下:

    int one = 1,two = 2;
    
    if(one < two){
    
        int temp = 0;
    
        temp = one;
    
        one = two;
    
        two = temp;
    
    }
    
    printf('big=%d,small=%d',one,two);  //big=2,small=1
    
    printf('temp=%d',temp); //出错

    Javascript代码如下:

     1 var one = 1,two = 2;
     2 
     3 if(one < two){
     4 
     5     var temp = 0;
     6 
     7     temp = one;
     8 
     9     one = two;
    10 
    11     two = temp;
    12 
    13 }
    14 
    15 console.info("big="+one+",small="+two); //big=2,small=1
    16 
    17 console.info(temp); //1

    我们发现在大括号里面声明的变量竟然在大括号以外依然能访问!!!这就是javascript变量神奇的地方之一 ——因为javascript没有块级作用域!!!

    这样就会出现一个问题,如果多人编辑一段程序时,每个人都根据自己的习惯,将临时变量命名为var temp,变量调用以后未释放内存,会不会污染其他人编写的程序呢?有可能。那如何杜绝呢?我们知道,在一个函数内部声明的变量是局部变量,外部无法访问,那我们是不是可以声明一个匿名函数,将逻辑过程封装起来,只返回结果呢?可以。

    我们对以上的javascript程序做如下修改:

     1 var one = 1,two = 2;
     2 
     3 (function(a,b){
     4 
     5     var temp = 0;
     6 
     7     if(a < b){
     8 
     9         var temp = 0;
    10 
    11         temp = a;
    12 
    13         a = two;
    14 
    15         b = temp;
    16 
    17     }
    18 
    19     console.info("big="+a+",small="+b);
    20 
    21 })(one,two); //big=2,small=1
    22 
    23 console.info(temp); //ReferenceError: temp is not defined

     

    函数执行的结果达到了我们的要求,而且声明的中间变量成为了局部变量,这样局部变量就不会污染其他程序了。

  • 相关阅读:
    HelpersSimpleCurl
    HelpersSessions
    HelpersReservedWords
    关于Java加载属性文件放在web容器不好使的解决办法
    (更新)Java + 腾讯企业邮箱 + javamail + SSL 发送邮件
    Java + 腾讯企业邮箱 + javamail + SSL 发送邮件
    struts2实现改变超链接的显示方式
    struts2 的正则表达式验证不起作用解决办法
    Hibernate5.1.0的hello word
    hibernateTools插件安装
  • 原文地址:https://www.cnblogs.com/foolishnoob/p/3772620.html
Copyright © 2011-2022 走看看