<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
作用域:
1.变量(变量作用域又称上下文)和函数生效(能被访问)的区域
2.全局、局部变量
3.作用域的访问顺序
递归:
1.找规律
2.找出口
递归的好处:让代码更加简洁
js运行三部曲:
语法分析:
预编译:发生在函数执行的前一刻
函数声明整体提升
变量 声明提升
1.imply global 暗示全局变量:
即任何变量,如果变量未经声明就赋值,此变量就为全局对象所有。
2.一切声明的全局变量,全是window的属性
window 就是全局的域
预编译四部曲:
1.创建AO (Activation Object)(执行上下文) (生成一个GO对象 === Global Object === window)
2.找形参和变量声明,将变量和形参名作为AO属性名,值为undefined
3.将实参值和形参统一
4.在函数体里面找函数声明,值赋予函数体
解释执行:
由里面到外边,函数里边有声明使用里面的,如果没有,则使用外边的变量声明
列如:
<script>
// 写一个函数,实现n的阶乘
function jc() {
if (n === 1){
return;
}
return n * jc(n - 1)
}
jc();
// 写一个函数,实现斐波那契数列
function fb(n) {
if (n === 1 || n === 2) {
return 1;
}
return fb(n - 1) + fb(n - 2);
}
console.log(fb(5));
(window.foo || (window.foo = 'bar'));
console.log(window.foo )
</script>
</body>
</html>