zoukankan      html  css  js  c++  java
  • JS执行环境与作用域理解

     执行环境定义了变量或函数有权访问的其他数据,每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中.执行环境分为全局执行环境和局部执行环境,在web浏览器中,全局执行环境默认为window.当代码在环境中执行时,会创建变量对象的一个作用域链

    如果用一个矩形来表示特定的执行环境.其中,内部环境可以通过作用域链访问所有的外部环境,但外部环境不能访问内部环境中的任何变量和函数.每个环境都可以向上搜索作用域链,但任何环境都不能通过向下搜索作用域链而进入另一个执行环境

    一个简单的例子展示changeColor函数可以访问外部的color属性,但是函数外部不能访问size属性

    var color = 'red'
    function changeColor () {
      var size = 'big'
      color = 'yellow'
    }
    
    console.log(color) //yellow
    console.log(size) // 报错

    var命令会发生“变量提升”现象,即变量可以在声明之前使用,值为undefined。es6中新增的let和const不允许变量提升

    es5中没有块级作用域, 在一个for循环中使用var声明的i,for循环结束后还是可以访问.es6中增加了let,let实际上为 JavaScript 新增了块级作用域

    for (var i = 0; i < 5; i++) {
      console.log(i); // 0, 1, 2, 3, 4
      
    }
    console.log(i); // 5
    
    for (let i = 0; i < 5; i++) {
      console.log(i); // 0, 1, 2, 3, 4
      
    }
    console.log(i); // 报错
  • 相关阅读:
    邮箱正则表达式写法
    java中的的正则表达式
    Java中重载(overload)和重写(override)的区别
    内部类的使用规范
    Java静态代码块(static block)调用陷阱小记
    sychronized关键字的使用
    关于java中一次编译多个源文件时的编译顺序的问题
    java中内部类的访问调用
    map的三种遍历方法
    Java堆.栈和常量池
  • 原文地址:https://www.cnblogs.com/steamed-twisted-roll/p/12383092.html
Copyright © 2011-2022 走看看