• 变量的作用域(一)


    函数运行过程中,变量的查找是由内向外逐层查找,直到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();
  • 相关阅读:
    formValidator4.1.1问题汇总
    什么,又是字符串拼接,我有些不淡定了
    webform下的分页辅助类再总结
    winform下的一个分页控件总结
    总结SQL Server窗口函数的简单使用
    sql复制表定义及复制数据行
    动态SQL开发基础和经验再总结
    c#执行定时计算限制操作(计时器)
    ado.net关于操作数据库的连接字符串整理
    使用Visual Studio实现WinForm多语言版本实例
  • 原文地址:https://www.cnblogs.com/Hanson823/p/10212918.html
Copyright © 2020-2023  润新知