JavaScript的预编译

时间:2021-1-18 作者:admin

JavaScript的预编译

JavaScript是一种脚本语言,如果没有弄清预编译的过程,会形成误区,从而出现一些问题。

全局的预编译

一般理解的预编译就是检查语法错误,内存会开辟一部分地址,用来存放对象,了解一些细节,可能会更好地理解预编译:
1. 全局对象(global object):浏览器引擎首先会生成GO对象,并定义一些初始属性,比如全局属性、全局函数等等,这些属性js程序都可以使用;
2. 解析声明的变量
比如下面的程序:

//code1
var b ;
console.log(b)  // undefined 
//code2
console.log(a)  // undefined 
var a = 5 ;
console.log(a)   // 5
预编译时,变量以undefined的形式存储。
你看到的代码块:
//code3
console.log(a)  // undefined 
var a = 5;
console.log(a)   // 5
var b = 3 
实际执行的顺序:
//code4
var a ; 
var b ; 
console.log(a) ;
a = 5 ;
console.log(a) ;
b = 3
所以code2的第一个打印是undefined。

3.解析函数声明:
存储函数名和函数体,如果函数名和变量名相同,则会覆盖。

var a;
function a() {

}
console.log(a)//ƒ a() {}

函数的预编译(局部)

函数预编译发生在函数执行的前一刻。
活动对象(active object):函数调用,也会生成作用域。

  • 分析参数,解析形参和实参;
  • 分析变量,和全局预编译的变量相同;
  • 分析函数声明,也可以理解为对象,函数名为属性名,函数体为值;
  • 匿名函数不参与预编译。

理解 预编译 能对作用域,this指向等方面有更好的理解

Global对象中有
unescape();
对由 escape() 编码的字符串进行解码, 把乱码变中文

var str = '%u5927%u50BB%u903C';
alert(unescape(str))
声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。