学习js的第五天【作用域,递归,对象,数组】


一.作用域

===>变量起作用的范围

1.局部作用域:在函数体中作用范围

2.全局作用域:在整个js全局起作用

var num=100 ----->全局作用域
function f(){var num1=200 ----->局部作用域}
console.log(num1) 输出的结果会报错,说num1是不被定义的
console.log(num)  正常输出100,num为全局作用域

作用域的访问规则:作用域的查找机制只能向上找,不能向下找

层层查找的关系,叫作用域链

1.会在当前作用域找访问变量

2.如果当前作用域没找到,到上级作用域去找

3.如果上级作用域没有,接着向上找,直到全局作用域

4.如果全局作用域也没有,直接报错.

赋值规则:

1.赋值前在当前作用域查找

2.上级作用域查找,找到赋值

3.上级作用域查找,直到全局作用域

4.如果都没有找到,将创建全局变量,然后赋值

内层函数可以访问外层函数作用域变量

外层不能访问内层作用域变量

二、递归函数

1.定义:函数自身调用自身,这样的函数称为递归函数(一定要有结束递归的条件)

function fun(){console.log('fun')fun()
} -------->没有结束递归的条件就会形成死递归

有结束递归的条件

function fun(n){if(n==1){ ------------>递归结束的条件return 1
}
console.log('fun')
fun(--)  ------------>改变递归条件的代码
}
fun(2)

注意:递归结束的条件

改变递归条件的代码

2.递归的作用:

解决哪些问题:

1>后面的结果由前面的推导出来,可以采用递归简化代码

求1+2+3+4+.....+100前三项的和
function f(n){if(n==1){return1
}
return f(n-1)+n
}
var sum=f(3)

列题:

  <!-- 递归-斐波那契 1, 1, 2, 3, 5, 8, 13 ...   前两项都是 1, 后面项等于前两项之和    --><script>function f(n){if(n<=2){return 1}return f(n-2)+f(n-1)}var m=f(7)console.log('第四项的值:'+m)</script><!-- 求1*2*3*4........前n项的乘积分析:f(1)=1f(2)=f(1)*2f(3)=f(2)*3 ======>f(n)=f(n-1)n -->
<script>function f(n){if(n==1){return 1}return f(n-1)*n}var m=f(3)console.log('前三项的乘积:'+m)
</script><!-- 求1+2+3+4+.....前三项的和 --><!-- 分析:f(1)=1f(2)=f(1)+2f(3)=f(2)+3====》f(n)=f(n-1)+n --><script>function f(n){if(n==1){return 1}return f(n-1)+n}var m1=f(5)console.log('前三项的和:'+m1)</script>

三.对象

1.对象==》object

属性        方法

2.创建对象:

var jackobj(对象名)={}  -------》创建空对象

var jackobj={

                        name:jack, --------->表示对象的一个特征,属性

                       age:18}

1.创建
var obj{name:'jack',age:18,sex:'男'}
2.访问:对象名.属性名
console.log(obj.name)
3.修改属性值:对象名.属性名='要修改的名字'
obj.name='rose'
4.删除属性:delete 对象名.属性名
delete obj.name
5.添加属性:对象名.要添加的属性名=属性值
obj.height=180
6.遍历对象属性:for-in
for(var key in obj){  ------->可以遍历整个对象的所有属性名和属性值
console.log(key)}
7.访问属性值,属性名是变量的情况:
var _name='name'
console.log(obj.[_name])

示例:

 <!-- 创建一个名为student的学生对象,有属性学号num,性别sex,班级grade, 成绩score, 姓名name分别用字面量方式和构造函数方式创建.要求打印显示学生信息到页面 -->var studentobj={name:'acy',sex:'女',grade:'三年二班',score:'优秀',num:'11009998'}// 遍历对象属性for(var key in studentobj){console.log('key'+ ' ' +key+ ' ' +'value'+' '+studentobj[key])}// 通过对象名访问对象属性:【对象名.属性名】console.log('姓名'+studentobj.name)// 修改属性值:【对象名.属性名='要修改的名字'】studentobj.name='ljm'console.log(studentobj.name)// 删除属性 【delete 对象名.属性名】delete studentobj.numfor(var key in studentobj){console.log('key'+' '+key+'value'+' '+studentobj[key])}// 添加属性 【对象名.要添加的属性名=要添加的属性值】studentobj.height=180console.log('身高'+studentobj.height)for(var key in studentobj){console.log('key'+' '+key+'value'+' '+studentobj[key])}// 访问属性值,属性名是变量的情况var _name='name'console.log(studentobj[_name])

3.数据类型:

var num=100 ------->number类型

var name='jack' ------->string类型

var obj={name:'jack',age='18'} --------->复杂数据类型

obj   数据类型名--------->  object

4.创建对象new语句:

字面量方式:var obj={}

构造函数方式:

var obj=new object()

obj.name='jack',

obj.age=18 

四.数组 Array

1.数组的作用:存储一系列有序数据的集合

2.创建数组:

var arr=[1,2,'jack',true]

3.索引号(下标)

4.访问数组元素

console.log(arr[0])

5.数组长度 (元素个数):length属性

console.log(arr.length) ------->可以拿到数组的长度

6.遍历数组:for -------->循环变量表示数组索引号从0开始

for(var i=0;i<arr.length;i++){

console.log(arr[i])}

7.构造函数方式创建数组:

var arr = new Array() ------->构造函数方式

列:var arr=new Array(10,9,8)

字面量:var arr=[]-------->空数组

8.创建数组时只有一个元素,表示创建一个空数组长度为5

var arr=new Array(5)

9.直接控制台打印

console.log(arr)

示例:

 <!-- 现有5名学生,语文成绩分别是98,87,95,89,77分,请定义一个成绩数组存储学生成绩并遍历输出求5名学生总成绩?求大于平均分的学生成绩?有一个存储两个数的数组[3,6]写程序交换数组元素,输出[6,3] -->var scoreArr=[98,87,95,89,77]for(var i=0;i<scoreArr.length;i++){console.log(scoreArr[i])}var sum=0for(var i=0;i<scoreArr.length;i++){sum=sum+scoreArr[i]}console.log('总成绩:'+sum)var sum=0var averagefor(var i=0;i<scoreArr.length;i++){sum=sum+scoreArr[i]average=sum/scoreArr.lengthif(scoreArr[i]>average){console.log('大于平均分:'+scoreArr[i])}}console.log('平均分:'+average)</script><!-- 有一个存储两个数的数组[3,6]写程序交换数组元素,输出[6,3] --><script>var arr=[3,6]// console.log(arr)var temp=arr[0]arr[0]=arr[1]arr[1]=tempconsole.log(arr)

学习js的第五天【作用域,递归,对象,数组】相关推荐

  1. 学习python第十五天,面对对象

    学习python第十五天,面对对象 面对对象又叫劝退对象,要么劝退你的对象,要么python劝退你,hhhh 开玩笑,但是这块知识点确实比较难 面向对象编 面向对象编程 指令式编程---->面向 ...

  2. 学习js第十五天~ jq动画方法

    学习jq第二天了,可以说是接触一个新的语法格式了,的确比原生简单很多,可能原生100行写完的,jq只要30行,想想在当时jq出来的时候,应该是程序员的一大福音叭,哈哈哈. 昨天学习中遇到一个问题,就是 ...

  3. 2020.11.4 《JavaScript高级教程》 第四章 变量、作用域和内存问题 第五章 引用类型(对象 数组 date function)

    第四章 变量,作用域和内存问题 基本类型和引用类型的区别 1.基本类型不能直接添加属性 引用类型可以直接添加属性: var person = new object();person.name = &q ...

  4. 前端JS: 通过代码-看函数作用域this对象

    函数中的this对象,指向的是调用该函数的对象:谁调用它,它的作用域中的this就指向谁: 每一个具体的问题,都值得思考这个细节点: 1.以下输出结果是: var obj={name:'test',o ...

  5. 【小白学习C++ 教程】五、C++数据结构向量和数组

    @Author:Runsen 文章目录 向量 初始化向量 添加和删​​除元素 向量的大小 向量操作 数组 向量 #include,是一个预处理器指令,它告诉编译器包含后面的任何库.在我们的例子中,这是 ...

  6. js中Array.prototype.find() 方法在对象数组上无效果,捉急。。。

    我在使用Array.prototype.find() 方法时,发现在对象数组上没有正确返回,过程如下: roleResourceList是个对象数组: 里面的数据是这样的: 调用find()方法: d ...

  7. 面向面试题的前端学习-js篇(自用,持续完善中)

    前言:初心是记录面试题,慢慢由每个知识点引伸出去,逐渐查缺补漏,构建出更完善的前端知识系统. 题目来源:牛客网 gitnub 目录 HTTP协议 get请求传参长度的误区 补充get和post请求在缓 ...

  8. JavaScript学习笔记(四)---闭包、递归、柯里化函数、继承、深浅拷贝、设计模式

    JavaScript学习笔记(四)---闭包.递归.柯里化函数.继承.深浅拷贝.设计模式 1. 匿名函数的使用场景 2.自运行 3.闭包 3.1前提: 3.2闭包 4.函数对象的三种定义方式 5.th ...

  9. 从零开始学习jQuery (五) 事件与事件对象

    本系列文章导航 从零开始学习jQuery (一) 开天辟地入门篇 从零开始学习jQuery (二) 万能的选择器 从零开始学习jQuery (三) 管理jQuery包装集 从零开始学习jQuery ( ...

最新文章

  1. java 存储过程 数组_Java调用存储过程返回数组
  2. 用R做heatmap示例:NBA联盟50位顶级球员的指标表现
  3. 总结了下自己的几个典型行为
  4. BZOJ4001 TJOI2015概率论(生成函数+卡特兰数)
  5. Python爬虫过程中验证码识别的三种解决方案
  6. 典型的同步客户端、服务器端套接字的创建
  7. 拒绝996,选对框架很关键!看这里。。。。。。
  8. js排序的时间复杂度_js 排序算法之快速排序
  9. php中加载图片淡入淡出,jQuery做出图片滚动淡入淡出
  10. Lena图像分解成小块与从小块合成
  11. 华为P30 HL2ELLEM VER.A手机图纸
  12. 九麟SDK 接入文档
  13. 深度学习入门 (九):卷积层和池化层的实现
  14. python文件下载战_在您的Python平台游戏中放一些战利品
  15. 计算机交互媒体应用范围,浅析交互媒体设计中的科技与艺术的关系
  16. matlab单位采样序列程序,常用序列的MATLAB代码(一)
  17. 读书笔记-天才和凡人
  18. html5 oa首页免费,免费的在线oa
  19. 怎么剪辑视频,这几个技巧必须学会
  20. 实战|使用python推送微信公众号消息(哄女友专用)

热门文章

  1. %s %*s %*.*s
  2. 陈艾盐:《春燕》百集访谈节目第三十九集
  3. 游戏六边形地图的实现
  4. JPush(极光推送)实战总结
  5. 线上会议竞品调研报告
  6. 浅谈iOS中关于app的优化
  7. iPad 上如何使用 5G 网络以及支持型号
  8. 【完全指南】如何在Github上使用Hexo搭建自己的Blog
  9. bootstrap 修改carousel 样式
  10. 暑假来了,画一个日月地球的轨道模型给孩子们,秒懂四季更迭、日蚀月蚀