zoukankan      html  css  js  c++  java
  • JavaScript中的var与作用域

    JavaScript中没有块级作用域,“块级作用域”中声明的变量将被添加到当前的执行环境中

    if(true) {
      var color = "blue";
    }
    console.log(color); // "blue"
    
    function test() {
      if(true) {
        var color = "blue"; // (当前执行环境为函数test的局部作用域,函数外部无法访问,内部可以访问)
      }
      console.log("blue"); // "blue"
      function inner() {
        console.log(color); // "blue"
      }
      inner();
    }
    test();
    console.log(color); // ReferenceError: color is not defined
    

    在JavaScript中,由for语句创建的变量,即使在for循环执行结束后,也依旧会存在于循环外部的执行环境中。

    for(var i = 0; i < 10; i++) {  
      var color = "blue";  
    }
    console.log(i); // 10 
    console.log(color); // "blue"
    

    使用var声明的变量会自动被添加到最接近的环境中。在函数内部,最接近的环境就是函数的局部环境;在with语句中,最接近的环境是函数环境。
    如果初始化变量时没有使用var声明,该变量会自动被添加到全局环境

    function add(num1, num2) {
      var sum = num1 + num2; // 用var声明
      return sum;
    }
    console.log(add(10, 20)); // 30
    console.log(sum); // ReferenceError: sum is not defined
    
    function add(num1, num2) {
      sum = num1 + num2; // 没有使用var声明
      return sum;
    }
    console.log(add(10, 20)); // 30
    console.log(sum); // 30
    

    如果局部环境中存在着同名标识符,就不会使用位于父环境中的标识符。

    var color = "blue";
    function getColor() {
      console.log(color); // undefined (变量提升)
    
      var color = "red"; 
      console.log(color); // red
    
      console.log(window.color); // blue
    
      return color;
    }
    
    console.log('return: ', getColor()); // return: red
    console.log(color); // blue
    
  • 相关阅读:
    js 函数声明和函数表达式的区别
    使用dom4j工具包对xml文件解析
    xml的schema约束
    xml的DTD约束
    C3P0连接池工具类使用
    jdbc连接警告不安全
    java的unity单元测试
    BootStrap容器介绍
    validate插件实现表单效验(二)
    validate插件实现表单效验(一)
  • 原文地址:https://www.cnblogs.com/uakora/p/12676607.html
Copyright © 2011-2022 走看看