作用域
- 什么是作用域:变量起作用的范围
- 全局作用域/全局变量:整个JS都起作用
- 局部作用域/局部变量:作用范围为在函数体内
var num =100 //全局变量/全局作用域 function a(){ var num1 = 200 //局部变量/局部作用域 console.log('num1:',num1) //打印局部200 function b(){ var num2 = 300 //局部变量/局部作用域 console.log('num2:',num2) //打印局部300 } } console.log('num:',num) //打印全局100
作用域访问规则
先在当前作用域找,若未找到,到上级作用域找,若未找到,接着向上找,直至全局作用域,若全局没有,直接报错为该变量未定义
var num =100 //全局变量/全局作用域
function a(){
var num1 = 200 //局部变量/局部作用域
console.log('num1:',num1) //当前作用域查找,找到赋值
function b(){
var num2 = 300 //当前作用域查找,找到赋值300
console.log('num2:',num) //全局作用域查找,找到赋值100
console.log('num1:',num1) //上级作用域查找,找到赋值200
}
}
console.log('num:',num) //打印全局100
递归函数
- 介绍:函数自身调用自身,称为递归函数
- 注:要有结束递归的条件,不然会变成死递归,要有改变递归条件
递归解决哪些问题?
- 后面结果由前面推导出来,可以采用递归简化实现
1+2+3=?
function f(n){
if(n == 1){
return 1 //结束条件
}
return f(n-1) + n //改变条件
}
var sum = f(3)
思路:
1*2*3*4*5=?
function f(n){
if(n == 1){
return 1
}
return f(n - 1)*n
}
var m = f(6)
document.wirte('前6项的和:'+m)
对象
面向对象
现实生活中的对象,对象有自己的特征行为->具体一个事物:张三同学
软件世界的对象-> 对象 Object 属性 方法
语法:
创建对象:对象里存储键/值对
var obj = {} //创建空对象
var obj = { //obj称为对象名,也可以叫引用变量 对象里存储键值对
name:'jack', //姓名属性->属性名 :属性值
age:18 //年龄属性->属性名 :属性值
sex:'男'
}
//2.访问属性值
//通过对象名访问对象属性 对象名.属性名 ->属性值
document.write('name:',obj.name)
//3.修改属性值
obj.name = 'rose'
document.write('name:',obj.name)
//4.删除属性
delete obj.name
document.write(obj)
//5.添加属性
obj.score = 98
document.write(obj)
//6.遍历对象 for-in
for(var key in obj){
//key是属性 key = 'name','age' obj[key]访问变量key的属性值
document.write('key',key,'value',obj[key])
}
//7.访问属性值,属性名是变量的情况
//通过对象名访问对象属性 对象名.属性名 ->属性值
document.write('name:',obj.name) //普通情况
document.write(对象名[属性名]) //变量情况
var _name = 'name' //变量情况
document.write(对象名[_name])
练习:创建一个名为Student的学生对象,有各个属性,再添加一个新属性,并通过for-in遍历打印出来
var Student ={ //创建一个名为Student的学生对象
num : 1 , //属性名与属性值
sex : '女' ,
grade :'璃月',
score : 98 ,
name : '申鹤'
}
Student.lover = 'me' //添加新属性
for(var key in Student){
//key是属性名 Student[key]用于访问属性值value,属性名是变量的情况
document.write(key,':',Student[key],' ') //键值对
}
数据类型
基本数据类型:
- var num = 100 //number
- var name = 'jack' //string
复杂数据类型:
- var obj = {name:'jack',age:18}
- obj 数据类型名 ->Object
创建对象 new语句
字面量方式:
var obj ={
name:'jack',
age:18
}
构造函数方式:
var obj = new Object() //空对象
obj.name = 'jack',
obj.age = 18
数组基础Array
作用:存储一系列有序数据的集合
语法:
var arr =[] //创建空数组
var arr = [1,1,'jack',true]
索引号:
var arr =[] //创建空数组
var arr = [1,1,'jack',true]
//0,1, 2 ,3
访问数组元素:
var arr =[] //创建空数组
var arr = [1,1,'jack',true]
document.write(arr[0]) //打印第一个 1
数组长度(元素个数):
- length属性
- arr.length
//length属性
//数组名.length
var arr =[] //创建空数组
var arr = [1,1,'jack',true]
document.write(arr.length)
遍历数组 for: 循环遍历 i 表示数组索引号从 i 开始
var arr =[] //创建空数组
var arr = [1,1,'jack',true]
for(var i = 0; i < arr.length; i++){ //从0开始遍历
document.write(arr[i])
}
创建数组方式:
- 构造函数: var arr = new Array() / / 空数组
- 字面量 : var arr = [ ] //空数组
var arr = new Array(1,1,'jack',true) for(var i = 0; i < arr.length; i++){ //从0开始遍历 document.write(arr[i]) }
创建数组只有一个元素,表示创建一个空数组长度是5 length为5
var arr = new Array(5)
document.write('arr.length >>>', arr.length) //打印结果为:arr.length >>> 5
直接控制台打印
var arr = [1,1,'jack',true]
console.log(arr); //控制台显示为: (4)[10,20,30,40]
数组基础练习:
//创建学生成绩数组,存储学生数学成绩
var scoreArr = [89,78,90,67,59]
//求分数最大值
var max = scoreArr[0] //假设第一个数为最大
for(var i = 1 ; i <= scoreArr.length ; i++ ){
if(scoreArr[i] > max){
max = scoreArr[i]
}
}
//求分数最小值
var min = scoreArr[0] //假设第一个数为最小
for(var i = 1 ; i <= scoreArr.length ; i++ ){
if(scoreArr[i] < min){
min = scoreArr[i]
}
}
//求不及格的学生有几个,输出打印到界面
var count = 0
for(var i = 0 ; i <= scoreArr.length ; i++ ){
if(scoreArr[i] < 60){
count++
}
}
document.write('不及格的人数为:',count)