zoukankan      html  css  js  c++  java
  • 函数的作用域和预解析问题

    一、函数的作用域的访问规则是向上查找的:

    1.如果这个函数在函数体内已经有变量的声明了,那么它就不会去外面查找。

    比如

      var a=10;

    function abc()

    {

      console.log(a);

      var a=20;

    }

    abc();

    上面这个函数输出是undefined。因为在函数内它自己有声明了,父函数那个声明就不会去用了。

    2.如果这个函数在函数体内没有声明变量,那么它就会去父亲函数里面找,如果父亲函数里有声明变量,那么就直接拿过来用,如果没有,就会去全局变量中查找。

    3.如果函数想要直接修改这个变量,但是这个变量又没有在这个函数体内有声明,那么就会去父亲函数里面找,如果父亲函数里面有声明,就会直接修改父亲函数声明的那个变量的值。

    二、预解析

    1.函数在声明变量的时候,会把变量的声明提前到作用域前(先声明不赋值),赋值语句还留在原地。

    2.函数声明的时候,会把函数的声明代码提前到作用域的最顶端。

    abc();

    console.log(a);

    console.log(b);

    console.log(c);

    function abc()

    {

      console.log(a);

      var a=b=c=10;

    }

    上面的结果

    首先是函数的代码会提前到作用域前,那么会被放到javascript标签内,所以预解析之后的代码:

    function abc()

    {

      console.log(a);

      var a=b=c=10;//这里等价与 b=10;c=10;var a=10;所以b和c是全局变量,a是局部变量

    }

    abc();

    console.log(a);

    console.log(b);

    console.log(c);

  • 相关阅读:
    关于动态库 DLL同名或者重名的问题总结
    UMDH使用步骤
    点是否在多边形内
    TOMCAT 显示 Context [/zhgsServer] startup failed due to previous errors
    删除 windows 服务中某条记录
    SQL SERVER 分页查询
    SQL Server中 ldf 文件过大的解决方法
    远程关机和远程重启
    把HBITMAP 保存图片文件.
    哲学与算法——高斯混合模型算法
  • 原文地址:https://www.cnblogs.com/gdfyh/p/6758307.html
Copyright © 2011-2022 走看看