作用域:一个变量可以生效的范围
全局作用域:最大的作用域
局部作用域:在这个作用域中定义的变量只能在这个局部作用域内部使用
在js中只有在函数中能生成一个局部作用域,每一个函数都是一个局部作用域
变量使用规则:
访问规则:先在自己作用域内部查找,若没有在上一级作用域中查找,直到全局作用域
注意:若在某个的作用域中已经找到,那么此作用域的上一级作用域就不会被查找
赋值规则:先找变量,然后再赋值
查找规则与访问规则是一样的,如果一直到全局作用域都没有的话,
那么这个变量就会被定义为全局变量,再给它赋值
作用域链:
先在自己作用域找,如果没找到,再一层层向上查找,直到最外层全局作用域
这种层层查找的关系叫做作用域链
递归函数:在函数内部,调用自己,循环往复
设置条件,避免死递归
递归没有普通的编程的效率高,但是代码书写相对较简单
// 递归求和
function qiuHe(n) {
if (n == 1) {
return 1
}
return qiuHe(n - 1) + n
}
var sum = qiuHe(6)
console.log(sum)
// Fibonacci数列:1,1,2,3,5,8
function Fibonacci(n) {
if (n === 1 || n === 2) {
return 1
}
return Fibonacci(n - 1) + Fibonacci(n - 2)
}
var f = Fibonacci(20)
console.log(f)
function fcci(num) {
var first = 1
var second = 1
var third = first + second
var i = 3
while (i < num) {
first = second
second = third
third = first + second
i++
}
return third
}
var sum = fcci(10)
console.log(sum)
对象:存储了一些基本数据类型的一个集合,每个属性用','相隔
属于复杂数据类型(复杂数据类型包括:Object,Function,Array,Date……)
对象中存储的数据是以"名称:值"的形式存储
或者以键值对的形式存在
对象里面数据叫法:每一条数据可以称为对象的属性
通俗的解释:一个大房子(对象名)里面有很多房间,每个房间有房间名(变量名),房间里面存储了数据。
通过'对象名.变量名'的方式可以将变量名对应的数据调用出来
创建简单对象的方式
字面量方式
var obj={} //创建空对象
obj.name='张三' //将'张三'赋值给对象obj的name属性
构造函数的方式
var obj=new Object() //空对象,赋值方式和上面一样