一、作用域
定义:变量起作用的范围
分类:全局作用域、局部作用域
局部作用域:在函数体中作用范围 (在局部的范围之内才有作用)
全局作用域:整个JS代码全局起作用 (在JS代码的任何地方都可以用)
var num1=100
function fun(){
var num2=200
console.log('num1:'+num1)//会在控制台输出num1:100
console.log('num2:'+num2)//会在控制台输出num2:200
}
fun()
console.log('num1:'+num1)//会在控制台输出num1:100
console.log('num2:'+num2)//会在控制台提示num2没有定义
二、规则
访问规则:先在当前作用域找局部变量,后在上一级找作用域变量,以此类推,直到找到全局作用域的变量,如果全局作用域也没有这个变量,就会提示这个变量没有定义。(作用域的查找机制只能向上找,不能向下找)
赋值规则:先在局部作用域内赋值给变量值,后在上一级找作用域变量并赋值,以此类推,直到找到全局作用域的变量并赋值,如果没有这个变量就会自动声明这个变量并赋值给这个变量。(作用域的查找机制只能向上找,不能向下找)
三、作用域链
定义:变量访问或赋值时,先在自己的作用域查找,如果没找到,再一层一层向上查找,至到最外层全局作用域。这种层层查找关系,叫作用域链。
说明:1、内层可以访问外层的变量。
2、外层不可用访问内层的变量。
四、递归函数
定义:函数自身调用自身,这样的函数称为递归函数。
作用:1、后面结果由前面推导出来的,可以采用递归简化实现
注意:1、要有递归结束的条件。
2、改变递归条件的代码。
五、对象
面向对象:现实生活中对象,对象有自己的特征行为
软件对象:对象:object,属性: 方法,属性名:属性值
创建对象
var jackObj={ } 创建空对象
var jackObj={
name:'jack', name为属性 jack为属性值
age:18, age为属性 18为属性值
sex:'男' sex为属性 男为属性值
}
对象的基本操作:
1、jackObj为对象名,也可以叫引用变量
2、通过对象名访问对象属性 写法:对象名.属性名
3、修改属性值 对象名.属性名=属性值
4、删除属性 delete 对象名.属性名
5、添加属性 对象名.属性名(新增属性名)=属性值
6、遍历对象 for-in for(var key(对应对象中的所有属性名) in 对象名)
7、访问属性值,属性值是变量的情况 对象名[属性值变量]
遍历
for-in的语法:for(var key(对应对象中的所有属性名) in 对象名)
数据类型:复杂数据类型中的object
创建对象new语句
字面量方式
var 对象名={
属性名:属性值
}
构造函数方式
var 对象名=new Object() 创建一个空对象
对象名.属性名:属性值,
对象名.属性名:属性值
六、数组(Array)
定义:存储一系列有序数据的集合
1、创建数组
var 数组名=[ ] 创建一个空的数组
var 数组名=[1,2,3,'jack',true,10]
2、访问数组
注意:数组索引号从0开始 索引号在其他地方也叫下标
数组名[索引号] 列如:arr[2] 访问第三个数组的值
3、数组长度
length属性
语法: 数组名.length
4、遍历数组(for)
语法:for(var i=0;i<数组名.length;i++){
console.log(数组名[i])
}
五、创建数组
构造函数 var 数组名=new Array() 空数组
字面量 var 数组名=[ ] 创建一个空的数组
六、创建数组只有一个元素
var 数组名=new Array(5) 表示创建一个长度是5 的数组 length=5
七、直接在控制台看数组中的全部值
console.log(数组名)