JavaScript是一种脚本语言, 它的执行过程, 是一种翻译执行的过程.并且JavaScript是有预编译过程的,在执行每一段脚本代码之前, 都会首先处理var关键字和function定义式(函数定义式和函数表达式). 一.变量执行之前,会被赋为undefined <p id="scope2" style="color:red"></p> function echo(p, html) { p.innerHTML += html + '&l…
 在我们js中存储数据的空间可以分为两种,堆内存和栈内存 堆内存:我们定义的那些引用数据类型的数据都会在堆内存中开辟空间. 栈内存:我们运行的js代码还有我们定义的基本数据类型,都直接在栈内存中存储 基本类型 Undefined ,Null ,Boolean ,Number,String 该五种类型在内存中占用空间,即 值保存在栈内存中,可以提高查询变量速度,我们说他们是按值访问的 引用类型 引用类型,内存地址存在栈中,实际值存在堆内存.在堆内存中为这个值分配空间,因为这个值不确定大小,因此不能…
JS代码执行的过程: 1.预编译 ---- 事先对js代码做一个预处理 2.代码运行---开始执行JS代码. JS编程: 1.加载DOM的最好在/BODY之前 2.与DOM渲染无关的放在Head里面 3.JS文件尽量独立方便压缩 同时文件少,减少请求次数. 4.变量使用命名空间,减少全局变量 5.JS操作DOM获取DOM是实时的,通过Length来预先存储,方便遍历. JS代码解析机制: 1.编译阶段---预处阶段-----转成字节码 2.运行阶段---代码执行-----执行本地代码 变量:va…
几乎所有的编程语言都可以存储,访问,修改变量,那在JavaScript中这些变量放在那里?程序如何找到他们? js被归类于解释执行语言,但事实上他也是一门编译语言,因为他也要编译,但于传统的编译语言不同,他不是提前编译,编译结果也不能在分布式系统中进行移植.但js引擎编译的步骤和传统的编译语言非常相似. 传统的编译会经历3个步骤: 分词:将组成的字符串分解成有意义的代码块(词法单元)for instance:var a = 2;被分解成var,a,=,2,;. 语法分析:将词法单元转换成有元素逐…
Js作为脚本语言,可以不需要编译直接运行,但遇到类似变量或者函数同名,预编译方面的知识可以帮助我们更好解决问题. 示例: 这是一段js中普通的函数调用代码 <script>1.    //var demo=undefined        2.    demo(1,2);3.    function demo(a,b){4.        console.log(b);5.    }6.    var demo = function(a,b){7.        console.log(a);…
javascript中有5种基本数据类型:Undefined,Null,Boolean,Number和String,还有一种复杂的数据类型--Object.javascript不支持任何创建自定义类型的机制,所有的值都成为以上六种类型之一. 一.typeof操作符 typeof操作符是用来检测变量的数据类型.对于值或变量使用typeof操作符会返回如下字符串. 例如: var box = '小徐'; alert(typeof box); //弹出string 一.Undefined类型 Unde…
首先,我们要知道javascript是单线程.解释性语言.所谓解释性语言,就是翻译一句执行一句.而不是通篇编译成一个文件再去执行. 其实这么说还没有这么直观,读一句执行一句那是到最后的事了.到JS执行前还有两大步骤. 那就是1.语法分析(或语意分析)→2.预编译→3.解释执行(真正的读一句执行一句) 第一步:语法分析(即扫描一下看一看有没有低级的语法错误,比如多个大括号啊,写个中文标点等等,只通篇检查语法,但不执行.这就是语法分析的过程.) 第二步:预编译过程(发生在函数执行时,也可说成执行的前…
JavaScript是一种脚本语言, 它的执行过程, 是一种翻译执行的过程.并且JavaScript是有预编译过程的,在执行每一段脚本代码之前, 都会首先处理var关键字和function定义式(函数定义式和函数表达式). 一.变量执行之前,会被赋为undefined <p id="scope2" style="color:red"></p> function echo(p, html) { p.innerHTML += html + '&l…
预编译 js执行顺序: 词法/语法分析 预编译 解释执行 js中存在预编译 function demo() { console.log('I am demo'); } demo(); //I am demo test(); // I am test //分析: 由于test函数可以执行,所以javascript一定存在预编译机制 function test() { console.log(" I am test") } var a; console.log(a) //undefined…
(一)JS预编译四部曲: 1,创建AO对象. 2,找形参和变量声明,将变量和新参名作为AO属性名,值为undefined. 3,将实参值和形参值统一. 4,在函数体里找函数声明,值赋给函数体. (二)作用域: 1.全局变量:函数外声明的变量,称为全部变量 局部变量:函数内部使用var声明的变量,称为局部变量 作用域在JS中同样也是一个重要的概念.它不复杂,因为ES5中只有全局作用域和函数作用域,我们都知道他没有块级作用域.但在ES6中多了一个let,他可以保证外层块不受内层块的影响.即内层块形成…