一、预编译
- 函数声明整体提升
- 变量声明提升(*注意是变量声明)
- 预编译分为全局预编译和局部预编译,全局预编译发生在页面加载完成时执行,而局部预编译发生在函数执行的前一刻。
js运行三步曲
- 语法分析
- 预编译
- 解释执行
imply global暗示全局变量,任何变量,如果变量未经声明就赋值,这些变量就为全局对象所有。一切声明的全局变量和未经声明的变量,全归window所有
局部预编译的4个步骤:
- 创建AO对象(Activation Object)执行期上下文。
- 找形参和变量声明,将变量和形参名作为AO属性名,值为undefined
- 将实参值和形参统一。
- 在函数体里面找函数声明,值赋予函数体。
全局预编译的3个步骤:
- 创建GO对象(Global Object)全局对象。
- 找变量声明,将变量名作为GO属性名,值为undefined
- 查找函数声明,作为GO属性,值赋予函数体
GO对象是全局预编译,所以它优先于AO对象所创建和执行
二、 数学对象
// 常量 Π
Math.PI
//四舍五入
var res = Math.round(5.921);
// 向上取整
var res = Math.ceil(1.1);
//向下取整
var res = Math.floor(1.9);
//幂运算 用来获取x的y次方 2的3次方
var res = Math.pow(2,3);
//获取绝对值
var res = Math.abs(-100);
//获取最小值
var res = Math.min(12312,324,32,42,3,23,412,4332,21,3,-1);
//获取最大值
var res = Math.max(10,23,523,43,65,46,32,32);
//获取绝对值
var res = Math.abs(-100);
//random 获取一个随机数 返回0-1之间的随机小数 有可能到0 ,但是不会取到1
var res = Math.random();
//0-9随机数 小数
var res = Math.random()*10;
//0-9随机整数 (9-0 +1) +0
var res = Math.floor(Math.random()*10);
//1-10随机整数(10-1 +1) +1
var res = Math.floor(Math.random()*10)+1;
[n,m]
Math.round(Math.random() * (m - n) + n)
Math.floor(Math.random() * (m - n + 1) + n)