• js作用域


      对js的函数作用域不是很了解,不像c是块级作用域。且看如下代码:

    var scope="global";
    function t(){
    console.log(scope);
    var scope="local"
    console.log(scope);
    }
    t();

      结果是undefined和local,感到很奇怪。要理解这个分两步走。

    1. 如下片段:

    function test(){ 
    for(var i=0;i<3;i++){ 
    var j=5;
    } 
    alert(i); 
    alert(j);
    } 
    test();

      输出是3和5,说明js和c++这些不同,能够访问(非函数)花括号内语句块定义的变量。

    2. 如下片段:

    function test(){ 
    alert(j);
    alert(i);
    var j=1;
    } 
    test();

       此时输出分别是undefined和报错,undefined的原因是运行到alert(j)的时候,找到了函数中变量j的定义,但是还没有运行到赋值阶段。所以j是空的。而alert(i)是因为找不到i这个变量,所以报错了。
    而2片段相当于:

    function test(){ 
    var j;
    alert(j);
    alert(i);
    j=1;
    } 
    test();

      可见变量在函数体内(非子函数)定义后都是可见的。

       那么如何避免块级变量的污染呢,比如我在函数内写一个if块级语句,里面定义了一个变量,要防止它污染这个函数的变量。答案就是函数闭包,或者函数内嵌套函数。

    如第一个例子可以改成:

    function test(){ 
    (
    function(){
    for(var i=0;i<3;i++){ 
    var j=5;
    }
    }
    )();
    alert(i);
    alert(j);
    }
    test();

     这样i j这两个变量就不会污染函数了。

  • 相关阅读:
    三周#学习进度总结
    四则运算(修改版)
    是否需要有代码规范?
    结对项目:代码复审+PSP
    二周#学习进度总结
    GitHub注册流程(中英对比)
    四则运算:我的设计和设想(未完成版)
    Spring4总结
    Hibernate5总结
    Struts2总结
  • 原文地址:https://www.cnblogs.com/actionscr/p/4854330.html
Copyright © 2020-2023  润新知