1、作用域:变量起作用的范围,分为全局作用域与局部作用域。
局部作用域:函数作用范围在函数体中,只能在其内部使用,每一个函数都是一个局部作用域。
全局作用域:在整个js全局中都起作用,其中定义的变量可以在任何地方使用。
<script>
var n = 10;//全局作用域
function fun() {
var m = 100//局部作用域
}
</script>
2、变量访问规则:访问变量时先在自己内部作用域查找变量,如果没有就逐层往上级作用域查找,直到全局作用域为止,如果还是没有,就报错:


3、变量赋值规则:给变量赋值时,先在自己内部作用域查找变量,如果没有就逐层往上级作用域查找,直到全局作用域为止,如果还是没有,就将当前变量声明为全局变量并赋值:
4、作用域链:变量访问或赋值时,先在自己的作用域查找,再逐层向上查找,直到最外层全局作用域,这样的逐层查找关系就叫作用域链。
5、递归函数:函数定义好之后不能自己执行,需要使用函数调用语句才会执行,调用语句一般写在函数体外面,如果出现在函数内部调用自己,这样的函数就叫做递归函数:
递归函数一旦执行就会循环往复没有尽头(也叫死递归),这时就需要给递归函数设置递归结束条件:

(1)递归函数的运行原理:
(2)递归函数的实现:
<script>
//1.函数调用自身
function fn() {
fn()
}
//2.递归结束条件
function fn() {
if (n == 1) {
return 1
}
}
// 3.前后关系,后面结果与前面值的关系,例如:1 + 2 + 3 + 4 + 5 = ?
/**
* 规律:f(n) = f(n - 1) + n
* f(5) = f(4) + 5
* f(4) = f(3) + 4
* f(3) = f(2) + 3
* f(2) = f(1) + 2
* f(1) = 1
*/
</script>
(3)例题1:入职薪水10K,每年涨幅5%,50年后工资多少?
// 入职薪水10K,每年涨幅5%,50年后工资多少?
function getSumSalary(year) {
if (year == 1) {
return 10 * 12;
}
return getSumSalary(year - 1) + getSumSalary(year - 1) * 0.05;
}
var sum = getSumSalary(50);
console.log(sum);
(4)例题2:递归-斐波那契 1, 1, 2, 3, 5, 8, 13 ... (前两项都是 1, 后面项等于前两项之和 )
// 递归-斐波那契 1, 1, 2, 3, 5, 8, 13 ... 前两项都是 1, 后面项等于前两项之和
function getResult(num) {
if (num == 1 || num == 2) {
return 1;
}
return getResult(num - 2) + getResult(num - 1);
}
var result = getResult(6);
console.log(result);
6. 初步了解对象
(1)对象(复杂数据类型)定义:
<script>
// 现实生活
// 对象
// => 具体一个事物
// 张三 李四
// x100手机 pm001手机
// 区别:
// 行为 特征
// 软件世界
// 对象
// 特征: 属性
// 行为: 方法
</script>
(2)对象的创建方式有两种:
(3)访问对象属性:对象.属性名
<script>
var obj = {
name: 'jack'
}
obj.name
</script>
练习1:
<script>
// var obj = {
// name: 'jack'
// }
// obj.name
/**
* 创建一个名为student的学生对象,有属性学号num,性别sex,班级grade, 成绩score, 姓名name
分别用字面量方式和构造函数方式创建.
要求打印显示学生信息到页面
*/
var student = {//字面量方式创建对象
num: 2022,
sex: 'nv',
grade: 2,
score: 89,
name: 'lili'
}
for (var key in student) {
console.log(student[key]);
}
var student = new Object()//构造函数方式创建
student.num = 2022,
student.sex = 'nv',
student.grade = 2,
student.score = 89,
student.name = 'lili'
for (var key in student) {
console.log(student[key]);
}
</script>
752

被折叠的 条评论
为什么被折叠?



