zoukankan      html  css  js  c++  java
  • 变量的作用域(一)

    函数运行过程中,变量的查找是由内向外逐层查找,直到window域
    如没有找到则返回undefined,或者is not defined
    如果是赋值操作,在没有找到的情况下,会在window域下面生成一个变量,并为之赋值,这样这个变量就会变成全局变量

    添加和不添加var声明变量的比较

    console.log(window.d);
    conosle.log(window.e);

    前两个变量d 和 e 在window 这个域里面没有这样的变量,所以返回undefined undefined

    function fun(){
      d = 5;
      var e = 6;
    }
    fun()


    通过运行fun函数, window 域下面的一个变量d被赋值,e就变成了一个函数内部的局部变量

    conosle.log(window.d);  // 5
    console.log(window.e);  //undefined
    console.log(e);      // e is not defined


    不加var 的变量通过赋值不会全部变成全局变量的

    例如:

    function fun1(){
      var a;
      function fun2 (){
        a = 6
        var b = 7
        c = 8
      }
      fun2()
    }
    fun1()
    console.log(window.c)    //8
    console.log(c)    //8
    console.log(a)    // a is not defined 错误
    console.log(b)    //如上面打印的变量a的语句不注释,这此语句不会被执行,因为JS执行特性为从上向下执行,报错后,后面的代码将不会被执行

    fun2函数内部给变量a赋值为6但变量a是一个函数内部的局部变量,在全局调用的就会找不到这个变量而报错(a is not defined),声明了一个局部变量 b 值为7,在全局调用b也会找不到这个变量报错(b is not defined),变量c 在函数内部没有找到声明的局部变量,就会一直向上层搜索,一直到window,如没有找到已经声明的变量,就会在window域下面声明一个变量,并给这个变量赋值

    如没有赋值操作,调用c 和 window.c的区别

    var a = 1
    function fun() {
      console.log(a);        // 1
      console.log(window.b);  // undefined
      console.log(b);      // b is not defined , 单独调用,则作为属性来查找,没有就会返回is not defined
    }
    fun();
  • 相关阅读:
    PHPUnit
    变长参数处理
    springMVC课程笔记(二)springMVC组件配置
    URL编码以及GET和POST提交乱码解决方案
    springMVC课程笔记(一)springMVC架构原理分析
    ELK(ElasticSearch, Logstash, Kibana) 实现 Java 分布式系统日志分析架构
    Java 标准 IO 流编程一览笔录( 下 )
    Java 标准 IO 流编程一览笔录( 上 )
    Zookeeper系列(十四)Zookeeper的数据与存储
    Zookeeper系列(十三)Zookeeper的请求处理
  • 原文地址:https://www.cnblogs.com/Hanson823/p/10212918.html
Copyright © 2011-2022 走看看