1. 语言主要分为两大类:编译型语言和解释型语言。
对于静态语言来说(如Java、C++、C),处理上述这些事情的叫编译器(Compiler),相应地对于JavaScript这样的动态语言则叫解释器(Interpreter)。
这两者的区别用一句话来概括就是:
编译器是将源代码编译为另外一种代码(比如机器码,或者字节码),而解释器是直接解析并将代码运行结果输出。我们常用的firebug就是一个JavaScript解释器。
2. JavaScript引擎解析脚本时, “预编译” 阶段。
首先会创建一个环境的上下文对象,然后把使用var声明的变量,作为上下文对象的属性,以undefined先行初始化;使用function关键字声明的函数,也作为上下文对象的属性,定义出来,而函数则保留了定义的内容。----在这个过程中,函数定义的优先级 高于 变量定义。
3.立即执行函数+闭包
1 var addFn = (function() { 2 var i = 1; 3 return function() { 4 console.log(++i); 5 } 6 })() 7 8 addFn(); //2 9 addFn(); //3 10 addFn(); //4 11 addFn(); //5 12 addFn(); //6
原文:https://www.cnblogs.com/spotman/p/10398682.html