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(); */
(0)

相关推荐

  • JS匿名函数和闭包

    $(function() {}) 是$(document).ready(function()的简写, 这个函数什么时候执行的呢? 答案:DOM 加载完毕之后执行. 立即执行函数(function(){ ...

  • javascript执行上下文、作用域与闭包(第六篇)

    终于讲到闭包了,当你在百度上搜索闭包时,你会被搜索出来的结果吓一跳,我的天,为什么说得都不一样?直到把所有的解释都看过了,我就只想说一句,到底谁说的是对的- 在这么多的不同解释里,我认真思考了很久,到 ...

  • 深入理解JavaScript作用域和作用域链

    目录 前言 作用域(Scope) 1.什么是作用域 2.全局作用域和函数作用域 3.块级作用域 作用域链 1.什么是自由变量 2.什么是作用域链 3.关于自由变量的取值 作用域与执行上下文 解释阶段: ...

  • JavaScript作用域

    作用域下的变量内存 · 全局变量(包括函数内无声名变量),在浏览器关闭时销毁 · 局部变量(包括函数形参),在执行完函数程序后销毁 作用域链 就近翻上查找变量输出 块级作用域 由于JavaScript ...

  • 什么是JavaScript的作用域

    作用域的概念 现代编程语言的最基本功能之一就是能够存储变量当中的值,以便于之后的使用于修改.也正是这个功能将状态带给了程序. 在JavaScript中,作用域就是一套设计良好的规则来存储变量. 简述编 ...

  • JavaScript 之 作用域

    学习目标:能够说出Javascript的两种作用域 能够区分全局变量和局部变量 能够说出如何在作用域链中查找变量的值 1.作用域 <script> //1.javaScript作用域:就是 ...

  • C++的标识符的作用域与可见性

    下面是关于C++的标识符的作用域与可见性学习记录,仅供参考 标识符的作用域与可见性 作用域是一个标识符在程序正文中有效的区域. 作用域分类 ①函数原型作用域 ②局部作用域(快作用域) ③类作用域 ④文 ...

  • 报告:JavaScript 开发者达1380 万,C#超越 PHP,Rust 增长最快

    出品|开源中国 文|白开水 研究公司 SlashData 最新发布的"State of the Developer Nation"第 20 版报告指出,全球开发者社区在过去六个月中 ...

  • javascript中的闭包这一篇就够了

    前端技术优选 今天 以下文章来源于程序员成长指北 ,作者koala 程序员成长指北专注 Node.js 技术栈分享,从 前端 到 Node.js 再到 后端数据库,祝您成为优秀的高级 Node.js ...

  • JavaScript 事件循环:从起源到浏览器再到 Node.js

    冰森 前端技术优选 今天 很多文章都在讨论事件循环 (Event Loop) 是什么,而几乎没有人讨论为什么 JavaScript 中会有事件循环.博主认为这是为什么很多人都不能很好理解事件循环的一个 ...

  • 用JavaScript打造AI应用-从Nodejs SDK 看DuerOS的技能开发

    为什么要掌握JavaScript呢? 使用JavaScript能能否开发AI应用么? 答案是肯定的. 全栈语言JavaScript 就全栈编程语言而言,与python 并驾齐驱的要算是JavaScri ...