zoukankan      html  css  js  c++  java
  • javascript的词法分析

    -.arguments的解释:

          1.是一个对象,是一个长的很像数组的对象

    二.arguments内容是什么?

         1.arguments是函数运行时的实参列表

        2.arguments收集的“所有”的实参,即使没有与之相对应的形参,也可以用arguments来获取任意多个的实参

       3.形参与对应的arguments单元,其实是相互映射的,互相影响

       4.arguments可以获取函数运行时,收到的实参个数(在多态里可以用到)

      5.arguments.callee  属性代表 “当前运行的函数”

    三:函数运行期内,关键的三个对象

       1.AO---》本函数A上没有某属相,则继续去外层函数的AO上找,直到全局对象  叫做  作用域链

       2.anguments---》 每个函数有自己的callee,但不向外层接着找 arguments 的相关属性,  即不形成链

       3.this的意思:

           1.作为普通的函数来调用  this的值指向--》window  准确的说,this为null 解释成window  在新的标准中this为null 则解释成undefine

           2.作为对象的方法来调用    this指向方法的调用者,即该对象    作为方法调用时,this指向其调用者,即母体对象

    四:js中函数的4种调用状态:

        1.作为普通函数来调用,    准确的说this 为null,但被解释成windows    在后来的标准中,如果this为null  则解释为undefine

        2.作为对象的方法来调用: this指向方法的调用者,即该对象    作为方法调用时,this指向其调用者,即母体对象

        3.函数作为构造函数调用时:   js中没有类的概念  创建对象是用构造函数来完成,或者直接用json格式{}来写对象

                                                函数作为构造函数运行时,return 的值是忽略的,还是返回对象。 

         4.函数通过call,apply 调用:    语法格式:函数.call(对象,参数1,参数2。。。参数N);

                                                  fn.call(对象obj,参数1,参数2,。。。参数N);

                                                  运行如下:

                                                a):fn函数中的this--指向---》对象obj

                                                b):运行fn(参数1,参数2,。。参数N);

    五: var的定义:是函数运行的上下文中,声明的一个变量。不加var 就是一个赋值操作

    六:词法分析的过程:

       0:AO={}

       1:分析参数  AO={greet:undefined}

       2:分析var声明 (变量) greet变量声明,AO已经有greet属性,因此不做任何影响

       3:分析greet函数声明,AO.greet=function(){},被覆盖成函数

    七:函数能使用的局部变量,分析3样东西

       1.先分析参数

       2.再分析变量声明

       3.分析函数声明

    八:具体步骤:

       0:函数运行前的1瞬间,生成Active  Object(活动对象),下称AO

       1:  1.1函数声明的参数,形成AO的属性,值全是undefined

             1.2接受实参,形成AO相应额属相值

      2:分析变量声明  如var  age

          如果AO上没有age 属性,则添加AO属相,值是undefined

           如果AO上已经有age属相,则不作任何影响

    3:分析函数声明 ,如 function   foo(){},

        则把函数赋给AO.foo属性   注:如果以前foo属性以存在,则被无情的覆盖了

    九:function  t1(){}和 t2=function(){}的区别:

         1.这两种方式,效果不同  

         2. t1是函数声明,虽然全局内也得到一个t1变量,值是function

         3.而t2只是一个赋值过程-----值是右侧的表达式的返回结果,即函数

         4.因此,t1 t2两种方式在词法分析时,有着本质区别    前者  在词法分析阶段,就发挥作用, 后者在运行阶段才发挥作用

    十:作用域链:函数由内到外  所产生的AO

  • 相关阅读:
    Goahead源码解析(转)
    登录处理
    action交互
    无需FQ,自建本地CDN,秒上StackOverFlow!
    浅谈Linux中的信号处理机制(三)
    漫谈C++11 Thread库之原子操作
    漫谈c++11 Thread库之使写多线程程序
    浅谈Linux中的信号处理机制(二)
    浅谈Linux中的信号处理机制(一)
    CentOS7 安装Nginx
  • 原文地址:https://www.cnblogs.com/sunliyuan/p/5724070.html
Copyright © 2011-2022 走看看