递归
- 找规律
- 找出口,如果没有出口,就是死循环。
函数自调用
// 阶乘
// n! = n * (n - 1)!
function num(n) {
if(n == 1 || n == 0) {
return 1
}
return n * num(n - 1)
}
num(10) // 3628800
//斐波那契额数列
// fb(n) == fb(n - 1) + fb(n - 2)
function fb(n) {
if(n == 1 || n == 2) {
return 1
}
return fb(n - 1) + fb(n - 2)
}
fb(10) // 55
预编译
JavaScript,是单线程,解释性语言。
语法分析
浏览器会通篇扫描,检查代码有没有低级错误,比如使用了中文符号等。但不执行代码
- 函数声明整体提升,不管函数声明写到哪里,浏览器都会提升到最前面。
test(); //-可执行
function test() {
console.log("被提升了")
}
- 变量 声明提升
//var a;
console.log(a); // undefined
// a = 123
var a = 123;
console.log(a); // 123
预编译前奏
-
imply global
暗示全局变量:即任何变量,如果变量未经声明就赋值,此变量就为全局对象window
所有。
var a = 1;
b = 2; //- window.b = 2
//
function demo() {
var a = b = 123;
/*
先赋值123给b,再声明a,把b的赋值给a。
a是局部变量,而b未经声明是个全局变量。
*/
}
demo();
console.log(a);
console.log(b);
- 全局上所有声明的变量(函数),全是
window
的属性。
var a = 1;
/* window { //a就是window的属性
a : 1
}
*/
函数预编译过程(四步骤)
- 创建OA对象
Activation Object
(执行期上下文); - 找形参和变量声明,将形参和变量名作为AO的属性名;
- 实参和形参值相统一;
- 在函数体中找到函数声明(函数声明优先级最高)
全局预编译过程
- 创建GO对象
Global Object
;window === GO
- 找形参和变量声明,将形参和变量名作为GO的属性名;
- 在函数体中找到函数声明(函数声明优先级最高)
网友评论