JavaScript入门 变量作用域/作用域访问规则/递归函数/对象/数组基础 Day05

作用域


  • 什么是作用域:变量起作用的范围
  • 全局作用域/全局变量:整个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 开始

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)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值