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();
  • 相关阅读:
    Leetcode 538. Convert BST to Greater Tree
    Leetcode 530. Minimum Absolute Difference in BST
    Leetcode 501. Find Mode in Binary Search Tree
    Leetcode 437. Path Sum III
    Leetcode 404. Sum of Left Leaves
    Leetcode 257. Binary Tree Paths
    Leetcode 235. Lowest Common Ancestor of a Binary Search Tree
    Leetcode 226. Invert Binary Tree
    Leetcode 112. Path Sum
    Leetcode 111. Minimum Depth of Binary Tree
  • 原文地址:https://www.cnblogs.com/Hanson823/p/10212918.html
Copyright © 2011-2022 走看看