• 作用域


    一、执行环境 

      1、执行环境:定义了变量或函数有权访问的其他数据,决定了他们各自的行为

      2、执行环境的类型:全局执行环境   —> script

                 局部执行环境   —> 函数

      3、每一个函数都有自己的执行环境,也就是私有作用域

      4、每一个执行环境都有一个变量对象,里面保存的是环境中定义的所有的变量和函数

      5、作用域链:当代码在一个环境中执行时,会创建变量对象的一个作用域链。沿着作用域链一级一级地搜索标识符的过程,如找不到标识符,通常会导致错误发生。局部环境可以通过作用域访问所有的外部环境,但外部环境不能访问内部环境中的任何变量和函数,全局执行环境的变量对象始终都是作用域链中的最后一个对象。

      6、全局执行环境直到应用程序退出时才会被销毁

      7、javaScript是没有块级作用域的

      8、在局部环境定义一个变量,如果没有使用var声明,该变量会自动被添加到全局环境

    二、作用域的作用:

      1、帮助你排查问题;

      2、帮助你了解整个代码执行的过程;

      3、帮助你理解JS解析机制是什么样的;

      4、变量的执行环境有助于确定应该何时解放内存;

    三、浏览器解析过程:

            浏览器中有一个JS解析器:

            1)JS的预解析:(存到预解析的仓库)

                在预解析的过程中,遇到重名:只留一个;

                变量和函数重名了,就只能留函数;

                所有的函数,在正式运行代码之前,都是整个函数块;

                所有的变量在正式运行代码之前都提前赋了一个值,未定义 ;

            2)逐行解读代码

            表达式:= + - * / % ++ -- ! Number() 参数...... (所有能够改变一些值的东西都叫做表达式)

            表达式 是可以修改预解析的值  (也就是可以修改预解析仓库里面的内容)

            在遇到函数这个局部作用域的时候,只要函数调用了,就会对函数进行 :1)预解析

                                                                                         2)逐行解读代码

            当要定义一个全局变量,或者是全局函数的话,要考虑到浏览器兼容问题,因此不要随便在if语句中定义变量和函数(火狐就不能对if语句中定义的全局变量进行解析 (if for等语句不是作用域,只要script函数json是全局作用域)

            想要获取函数内的值:  

            1、通过全局变量找到函数内的值

            2、通过局部函数调用,来用传参实现

      

  • 相关阅读:
    tsql导出EXCEL语句待测试
    IE和Firefox下event乱谈
    cf 167.d( 多重集全排列 )
    poj 1815(最小割 + 枚举)
    Codeforces Round #167 (Div. 2)
    poj 3308(最小割+对数处理)
    在FootTemplate与ItemTemplate中间扩展Repeater模板
    在没有高度设定的情况下让margintop生效
    float:left后整体居中
    判断ExecuteScalar()是否返回结果
  • 原文地址:https://www.cnblogs.com/effieduo/p/5045700.html
Copyright © 2020-2023  润新知