JavaScript:词法分析.连续赋值猜想 原创文章,转摘请注明出处:苏福:http://www.cnblogs.com/susufufu/p/5851642.html 深夜发文,先吐槽下博客园的编辑器,真不方便!我都是本地编辑好了在粘过来的,要是不用MarkDown写的话,那每次都得改改改啊! 先说下这个老话题:连续赋值 例1: function a(){ var o1 = o2 = 5; } a(); console.log(o1); console.log(o2); 结果是什么?cons…
JavaScript代码自上而下执行,但是在js代码执行前,会首先进行词法分析,所以事实上,js运行要分为词法分析和执行两个阶段. 词法分析主要分为三步: 第一步: 分析形参: 第二步: 分析变量声明: 第三部: 分析函数声明: 如果存在函数嵌套,则会从外向里进行词法分析. 具体步骤: :  在函数执行的一瞬间,生产Active Object(活动对象),下面简称AO. : 1.1:  函数声明时的形参,形成AO的属性,默认值是undefined. 1.2:  接受形参,给刚刚形成的AO属性的形…
JavaScript代码运行前有一个类似编译的过程即词法分析,词法分析主要有三个步骤: 分析参数 再分析变量的声明 分析函数声明 具体步骤如下: 函数在运行的瞬间,生成一个活动对象(Active Object),简称AO 第一步:分析参数: 函数接收形式参数,添加到AO的属性,并且这个时候值为undefine,即AO.age=undefine 接收实参,添加到AO的属性,覆盖之前的undefine 第二步:分析变量声明:如var age;或var age=18; 如果上一步分析参数中AO还没有a…
JavaScript代码运行前有一个类似编译的过程即词法分析,词法分析主要有三个步骤: 1.分析函数的参数 2.分析函数的变量声明 3.分析函数的函数声明表达式 具体步骤如下: 函数在运行的瞬间,生成一个活动对象(Active Object),简称AO 第一步:分析参数: 函数接收形式参数,添加到AO的属性,并且这个时候值为undefine,即AO.age=undefine 接收实参,添加到AO的属性,覆盖之前的undefine 第二步:分析变量声明:如var age;或var age=18;…
JavaScript中在调用函数的那一瞬间之前,会先进行词法分析 词法分析的过程: 当函数调用的前一瞬间,会先形成一个激活对象:Avtive Object(AO),并会分析以下3个方面: 1:函数参数,如果有,则将此参数赋值给AO,且值为undefined.如果没有,则不做任何操作.2:函数局部变量,如果AO上有同名的值,则不做任何操作.如果没有,则将此变量赋值给AO,并且值为undefined.3:函数声明,如果AO上有,则会将AO上的对象覆盖.如果没有,则不做任何操作. 函数内部无论是使用参…
词法分析的过程: 先分析参数 分析变量声明 分析函数声明 具体步骤: 在函数运行前的一瞬间,先生成Active Object活动对象; 函数声明的参数,形成AO的属性,值为undefined 接收参数(实参),形成AO相应属性的值 分析变量的声明,如 var age, c-1. 如果AO还没有age属性,则添加AO的age属性,值是undefined c-2. 如果AO已经有了age属性,则不作任何影响 5. 分析函数声明,如function foo(){},则吧函数付给AO.foo属性,如果此…
下面是一个连续赋值的例子: 在这里面,先创建a对象并添加n:1,然后将a对象赋值给b,这时候a和b引用同一个对象.最后我们要着重理解这最后一行代码 a.x = a = {n:2}; 按照我们平常的思维,应该是{n:2}赋值给 a,a的引用改变了,但b仍然是原来的引用,然后再赋值给a.x,这时候a是{n:2,x:{n:2}},也即是a.x={n:2}.但是,很显然我们的执行结果不是这样的,为什么会这样呢? 其实这是调皮的运算优先级搞的鬼,a.x成员访问的优先级仅次于括号(),成员访问.访问的属性如…
函数在调用之前,会进行词法分析或者叫语法分析: 1. 函数在形成调用的那一瞬间,会有一个活动对象叫 active object ,简称AO,会分析如下几条: 形式参数 函数内局部变量声明 函数声明表达式 如下面的实例: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </…
之前在扒源码时经常看到类似的连续赋值操作:  var a = b = 1;  在某度搜了众多前辈的博客,总算对这骚操作有点眉目. Case analysis 首先,javascript中连续赋值最典型案例是: var a = {n: 1}; var b = a; a.x = a = {n: 2}; console.log(a.x); //undefined console.log(b.x); //{n: 2} Analysis in short var a = {n: 1}; //创建对象{n:…
何谓JavaScript?它与Java有什么关系? JavaScript与HTML.CSS组合使用应用于前端开发,JavaScript是一门独立的语言,浏览器内置了JS的解释器.它除了和Java名字长得相似,没有半毛线关系. JavaScript组成 一个完整的JavaScript实现是由以下几个部分组成: 核心(ECMAScript)       包括:语法.类型.语句.关键字.保留字.运算符.对象(封装 继承 多态) 文档对象模型(DOM)    Document object model…