分享

JavaScript-作用域

 头号码甲 2021-08-24

作用域有:全局作用域和局部作用域

var  除了函数的{}之外,其他地方都不会认为是子作用域
let   在任意{ }里面,如果用的是let关键词定义的变量,那么这个{}视为一个子作用域,在for的()里面,用let定义变量,视为子作用域.

Var的解析

1. 定义 -- 找出变量   (找当前作用域所有的 var、function 两个关键词定义出来的变量)
2. 执行 -- 从上到下,执行代码  (取值,就近原则,当前作用域有值就取当前,没有就取父级)

举例说明如下:

    var x = 5;
    a();    function a(){
      alert(x);      var x = 10;
    }
    alert(x);    /*
    * 1. 定义
    *   15:var x;
    *   17-20: function a(){...}
    *
    * 2. 执行
    *   15: x=5;
    *   16: a();   ==子作用域==> 1. 定义
    *                             19: var x;
    *                           2. 执行
    *                             18: alert(x); //undefined
    *                             19: x = 10;(改变的是自己作用域的x)
    *   21: alert(x); //5
    *
    *
    * */

重名注意事项(var,function,let)

1.  let  :同作用域下,let 不允许重名
2.  var 与 function 可以重名   
注  :1.var var重名,就当成同一个变量来看   
  2.  function function重名,以最后面的对准.   
  3.   var function重名,(1.定义)过程中,以function为准   
  4.  执行后重新赋值,以赋值的值为准
 

举例说明如下:

    alert(a);    var a = 10;
    alert(a);    function a(){alert(20)}
    alert(a);    var a = 30;
    alert(a);    function a(){alert(40)}
    alert(a);    /*
    * 1. 定义
    *   22: function a(){alert(40)}
    *
    * 2. 执行
    *   15: alert(a); // 打印函数体function a(){alert(40)}
    *   16: a = 10;
    *   17: alert(a); // 10
    *   19: alert(a); // 10
    *   20: a = 30;
    *   21: alert(a); // 30
    *   23: alert(a); // 30
    *
    * */

闭包

 含义:  函数里面嵌套一个函数,内部函数使用了外部函数的参数/变量,形成闭包.
   
   在一个作用域中包含一个作用域,子作用域使用了父作用域的 参数/变量 ,形成闭包.
 

举例说明如下:

    (function(){

      let a = 10;
      document.onclick = function(){
        a ++;
        console.log(a);
      };

    })();/*     function a(){
      let x = 20;

      return function() {
        x ++;
        console.log(x);
      }
    }

    let b = a(); *//* 
    b();
    b();
    b();
    b();
    b();


    let c = a();

    c();
    c();
    c();
    c();
    c(); */

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多