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);

  • 相关阅读:
    C++文件读写详解(ofstream,ifstream,fstream)
    C++ char*,const char*,string,int 的相互转换
    Properties --- C++读配置信息的类
    值得推荐的C/C++框架和库
    leetcode 264: Ugly Number II
    几种Tab的实现方法
    HBase数据存储格式
    粗略。。Java项目设计模式之笔记----studying
    开放的平台、向上的文化——揭秘万达电商(4)
    RecyclerView
  • 原文地址:https://www.cnblogs.com/gdfyh/p/6758307.html
Copyright © 2011-2022 走看看