zoukankan      html  css  js  c++  java
  • 读javascript高级程序设计02-变量作用域

    一、 延长作用域链

    有些语句可以在作用域前端临时增加一个变量对象,该变量对象在代码执行完成后会被移除。

    ①with语句延长作用域。

    function buildUrl(){
    var qs="?debug=true";
      with(location){
      var url=href+qs;
      }
      return url;
    }
    buildUrl(); //result:http://www.fanxbao.com/?debug=true

    ②try...catch...中的catch语句块延长作用域链。

    function test(){
      try{
          alert(sum); 
      }catch(ex){
        console.log(ex);
      }
    }
    
    test();//result:ReferenceError: sum is not defined

    二、 没有块级作用域

    一般在C类语言中,由花括号封闭的代码块有自己的作用域,其中定义的变量在代码块外部是不可见的。例如在c#中:

    private void Test(){
    for(int i=0;i<10;i++){
         Console.WriteLine(i);
    }
         Console.WriteLine(i);//报错
    }

    但是,在javascript中却不同,在代码块中创建的变量会将其添加到当前执行环境中。在代码块执行完毕后不会自动销毁。例如:

    function test(){
    for(var i=0;i<10;i++){
         console.log(i);
    }
        console.log(i);//可以执行,结果输出10
    }
    test();

    这里的变量i被添加到全局作用域中,在for循环之后仍可以访问。

    三、 匿名函数模仿块级作用域

    function test(){
     //匿名函数
      (
    function(){ for(var i=0;i<10;i++
    ){
             console.log(i);
        }
      })();
        console.log(i);//报错:i is not defined
    }
    test();

    其实这个过程就类似于:

    function test(){
      var f=function(){
        for(var i=0;i<10;i++){
             console.log(i);
        }
      };
      f();
      console.log(i);//报错:i is not defined
    }
    test();

    四、var声明变量

    使用var声明的变量会自动被添加到最接近的执行环境中,比如在函数内部声明的变量执行环境就是函数这个局部环境。但是如果变量声明时没有使用var,则作用域为全局执行环境。例如:

    function add(a,b){
      var sum=a+b;
      return sum;
    }
    var result=add(10,20);
    console.log(sum);//执行结果:sum is not defined
    function add1(a,b){
      sum=a+b;
      return sum;
    }
    var result=add1(10,20);
    console.log(sum);//执行结果:30

    不过这种情况要尽量避免,很容易出现不易发现的错误。

  • 相关阅读:
    浅谈社交网络中的用户心理
    QQ公众号&微信公众号,左右互搏?
    双11预售不能无理由退货?
    大数据:70多个网站让你免费获取大数据存储库
    雜項.筆記
    字母源流
    心經日語讀法
    throttle與debounce算法的邏輯
    解決中英混合輸入時標點切換問題的辦法
    漢譯Promises/A+規範
  • 原文地址:https://www.cnblogs.com/janes/p/3829638.html
Copyright © 2011-2022 走看看