zoukankan      html  css  js  c++  java
  • JavaScript-作用域

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

    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(); */
     
  • 相关阅读:
    自学mvc4.0 工作当中随笔(在view页面当中循环table,当遇到html标签怎么处理)
    安卓当中的线程和每秒刷一次
    通过后台代码访问前台js
    学习正则表达式记录
    net 当中动态给记事本当中插入值
    session,cookie 等区别
    vss 2.0框架与4.0框架的设置iis区别
    Javascript中char和int的互相转换的代码(转载)
    获得鼠标在页面上的坐标
    HTTP协议header头域
  • 原文地址:https://www.cnblogs.com/yhy-blog/p/14347870.html
Copyright © 2011-2022 走看看