作用域概念
作用域:变量起作用的范围,分为全局作用域和局部作用域
-
全局作用域:在整个js中起作用
-
局部作用域:在函数体内起作用
var num = 100 //全局变量 functon fun(){ //局部作用域 var num1 = 100//局部变量 console.log(num) // 100 } console.log(num1) // 报错,num1 is undefind console.log(num) // 100
作用域的访问规则
1.首先会在当前作用域找
2.如果当前作用域没找到,就到上级作用域找
3.如果上级作用局没有,就接着往上找,到全局作用域
4.如果全局作用域也没有,就报错
var num = 100 //全局变量
functon fun1(){
//局部作用域
var num1 = 100//局部变量
function fun2(){
var num2 = 100
console.log('fun2 num2', num2) //当前作用域
console.log('fun2 num1', num1) //上级作用域
console.log('fun2 num', num) //全局作用域
console.log(num3) //没找到,报错
}
}
console.log(num1) // 报错,num1 is undefind
console.log(num) // 100
作用域的赋值规则几乎等同于访问规则,区别是如果在全局作用域中也没有找到函数的声明,他会自动创建全局声明。
递归函数
概念: 函数自身调用自身,这样的函数被称为递归函数
注意:要有递归结束的条件,否则会成为死循环,同时也要有改变循环的条件(类似于循环)
递归解决问题 》》 后面的结果由前面的结果推导出来,可以采用递归简化实现
// 1 + 2 + 3 + 4 求和
function f(n) {
//结束条件
if( n == 1){
return 1
}
return f(n - 1) + n
}
var sum = f(n)
对象
面向对象 现实生活中的对象 具体一个事物
软件世界 对象-->Object 具有属性 方法
创建对象
var obj = {} //创建一个空对象
var obj = { //创建一个对象
name:'jack', //姓名属性
age:'20', //年龄属性
sex:'男' //性别属性
}
obj称为对象名,也可以叫做引用变量 通过对象名访问对象属性 对象名.属性名 --> 属性值
obj.name --> 'jack'
修改属性的值 直接获取属性然后赋一个新的值
obj.name = 'rose'
删除属性
delete obj.name
添加属性
obj.score = 98 --> obj.新属性 == 属性值
遍历对象 for-in
for(var key in obj){
console.log('key',key)
}
访问属性值,属性名是变量
console.log( 'name ',obj.name)
var _name = 'name'
console.log(obj[_name])
console.log(obj['name'])
复杂数据类型
1、对象 Object
2、数组 Array 数组的作用 : 存储一系列有序数据的集合
1:创建数组 字面量方式
var arr = [] //创建空数组
var arr = [1,2,'jack',...] //创建数组
2:索引号 0 1 2 ...
3:访问数组元素
arr[i] // i为索引值
4:数组长度
arr.length // 长度等于元素个数
5: 遍历数组
for( var i = 0; i < arr.length ; i ++){
console.log(arr[i]) //遍历打印数组元素
}
构建函数 创建数组
var arr = new Array() //创建一个空数组