例1、

<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<script type="text/javascript">
global = 100
function fn(){
console.log(global);
global = 200;
console.log(global);
var global = 300
}
fn()
var global;
</script>
</body>
</html>

执行分析

先生成GO{}

GO{

  global:100

  fn:function(){}

}

函数fn执行前生成AO{}

AO{

  global:undefined

}

AO中有自己的变量global,不调用GO的global。(就近原则)

执行结果

例2

<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<script type="text/javascript">
function test(){
console.log(b)
if(a){
var b = 100;
}
c = 234;
console.log(c);
}
var a;
test();
a = 10;
console.log(c);
</script>
</body>
</html>

执行分析

首先生成GO

GO{

  a:undefined

  test:function test(){}

}

执行test()行时生成AO{}  不要受 if 的影响。

AO{

  b:undefined

}

//第一个输出为undefinded

接着执行if()模块

此时a为undefined,if()模块为false

接着GO{}中添加一个属性c,值为234

第二个输出为234  第三个输出是234.

执行结果

例3(百度2013笔试题

1)

<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<script type="text/javascript">
function bar(){
return foo;
foo = 10;
function foo(){ }
var foo = 11;
}
document.write(bar())
</script>
</body>
</html>

2)

<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<script type="text/javascript">
function bar(){
foo = 10;
function foo(){ }
var foo = 11;
return foo;
}
document.write(bar())
</script>
</body>
</html>

1)的预编译分析

执行bar()生成一个AO对象 bar(){}函数中有var foo = 11,即有变量声明foo,值为undefined,  接着有函数function foo(){} ,foo的值被覆盖 为functoin(){}

AO{

  foo:undefined   --->   foo:function(){}

}

执行结果

2)的预编译分析

同上,最后foo的值被覆盖为11  并return。

执行结果

javascript预编译练习(变态篇)的更多相关文章

  1. 关于JavaScript预编译和执行顺序以及函数引用类型的思考

    昨晚在对项目中的一部分做模块化处理的时候,遇到了一个问题,一个重新定义的function对一个通用类中的function进行赋值覆盖的时候,失败了.问题抽象出来是这样的: <script > ...

  2. javaScript 预编译过程浅尝

    javaScript 预编译过程 1.创建AO对象(Activation Object) AO{ a: } 2.找形参和变量声明,将变量和形参作为AO属性名,值为undefined AO{ a:und ...

  3. JavaScript 预编译与作用域

    JavaScript 预编译与作用域 JavaScript 预编译的过程和作用域的分析步骤是 JS 学习中重要的一环,能够帮助我们知道代码的执行顺序,更好理解闭包的概念 预编译 JavaScript ...

  4. javascript预编译的过程

    预编译的两种情况 全局: 1.全局 直接是script标签中的代码,不包括函数执行执行前:1.首先生成一个GO(global object)对象,看不到,但是可以模拟出来用来分析2.分析变量声明,变量 ...

  5. Javascript - 预编译与函数词法作用域

    预编译与函数词法作用域(Precompiled & Scoped) 预编译 Javascript脚本的宿主在执行代码之前对脚本做了预编译处理,比如浏览器对Js进行了预编译,编译器会扫描所有的声 ...

  6. JavaScript预编译详解

    一.js运行三部曲: 1.语法分析(通篇扫描看有没有语法错误) 2.预编译 3.解释执行 二.预编译前奏 1.imply global 暗示全局变量:任何变量如果未经声明就赋值,此变量为全局对象所有 ...

  7. 浅谈JavaScript预编译原理

    这两天又把js的基础重新复习了一下,很多不懂得还是得回归基础,大家都知道js是解释性语言,就是编译一行执行一行,但是在执行的之前,系统会做一些工作: 1,语法分析: 2,预编译: 3,解释执行. 语法 ...

  8. javascript预编译和执行过程总结

    javascript相对于其它语言来说是一种弱类型的语言,在其它如java语言中,程序的执行需要有编译的阶段,而在javascript中也有类似的“预编译阶段”(javascript的预编译是以代码块 ...

  9. JavaScript预编译过程理解

    1-JavaScript运行三部曲 语法分析 预编译 解释执行 语法分析很简单,就是引擎检查你的代码有没有什么低级的语法错误: 解释执行顾名思义便是执行代码了: 预编译简单理解就是在内存中开辟一些空间 ...

随机推荐

  1. css 命名规范 BEM

    在项目的开发过程当中, 我们往往因为日益复杂的css代码而感到力不从心. 如何合理的组织css代码成为了我们前端开发过程中必须考虑到的环节. 在读element源代码的时候, 了解到了BEM的命名风格 ...

  2. B - Problem Arrangement ZOJ - 3777

    Problem Arrangement ZOJ - 3777 题目大意:有n道题,第i道题第j个做可以获得Pij的兴趣值,问至少得到m兴趣值的数学期望是多少,如果没有的话就输出No solution. ...

  3. go之基本数据类型

    一.整形 Go语言里支持有符号和无符号两种整型.这里的符号就是正负号. 1.分类: 有符号的整型:int , int8 , int16 , int32 , int64 无符号的整型:uint,uint ...

  4. 消息模板-RabbitTemplate

    RabbitTemplate是我们在与SpringAMQP整合的时候进行发送消息的关键类该类提供了丰富的发送消息的方法,包括可靠性消息投递.回调监听消息接口ConfirmCallback.返回值确认接 ...

  5. 「CTSC 2008」祭祀

    题目链接 戳我 \(Solution\) 第一问 这道题要知道一个叫做\(Dilworth\)的定理 最长反链\(=\)最小链覆盖 证明(\(from\ r\_64\)): 所以我们只要求一个最小链覆 ...

  6. Caused by: java.lang.IllegalStateException: Unable to complete the scan for annotations for web application [/Cppcc] due to a StackOverflowError. Possible root causes include a too low setting for -Xs

    解决办法:(1)修改D:\Java\apache-tomcat-7.0.88\conf\catalina.properties (122line) (2)如org.apache.catalina.st ...

  7. leetcode题目4.寻找两个有序数组的中位数(困难)

    题目描述: 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和  ...

  8. Walkthrough: My first WPF desktop application

    Walkthrough: My first WPF desktop application This article shows you how to develop a Windows Presen ...

  9. If表达式 kotlin(8)

    If表达式 在 Kotlin 中, if 是一个表达式,即它会返回一个值. 因此就不需要三元运算符(条件 ? 然 后 : 否则) ,因为普通的 if 就能胜任这个角色. // 传统用法 var max ...

  10. openMP---第一篇

    openMP 处理for循环 ///////////////////////////////////////////////////////////////////////////////////// ...