5.4 变量作用域
局部变量,就是在函数内部定义的变量,这个变量只能在函数内部使用,在
全局中不能使用,举个例子,三国时期,把曹操,刘备,孙权比喻成三个函数
那么曹操手下的将领是不会听刘备与孙权的命令的,刘备与孙权同理,他们手下
的兵只会听从自己老大的命令
在函数的内部定义一个变量,如果没有加上var,那么这个变量就会被认为是
全局变量
全局变量:在函数外部定义的变量,这个变量可以在全局进行使用。
举个例子:汉朝的皇帝发布命令,那么不管是曹操还是刘备或者孙权,都要
听皇帝的命令
冲突处理:就近原则
当函数中定义了一个与全局变量名字相同的变量,此时函数在定义前使用,
那么这个变量还是函数中的变量,(没给值)是underfind,不会使用全局变量
局部和全局同时定义了一个相同名字的变量时如何在局部变量里面访问全局变量
在局部给变量加一个window的前缀,据可以访问到全局的变量
案例:验证哥德巴赫猜想(函数方法)
哥德巴赫猜想:任意一个大于6的偶数都可以写成两个质数之和(质数就是素数)。
6数组
6.1 数组的概念
案例:计算五名同学的平均分
这个程序非常简单,但是如果要计算100人的呢?
要复制100编吗?
我们要用到循环
但是循环好像做不了,因为无法去控制变量a1,a2,
也就是说无法将循环变量和变量a1,a2联系起来
这段代码能够实现同样的功能,而且如果是100人的话,
只需要把循环的条件改成i<100即可,整个程序的结构
和代码量与人数的多少没有关系
为什么没有关系呢,因为和循环结合了
为什么和循环结合了呢
因为我们把变量的表示方式改变了,改变成名称加序号
的方式(a[0],a[1],a[2]……)这样的话序号就可以用循环来
控制
6.2 数组的定义与元素访问
怎么写?
定义数组有三种方式
(1)var a=[];
(2)var a=new Array();
(3)var a=[0,1,2,3,1];
如何访问数组中的元素?
A[0]=0
A[1]=1
A[4]=1
我们在使用数组的时候要注意一个下标问题,5个元素的
数组,下标只有0~4,不包括5,5已经下标越界了
数组的本质:一组变量的集合,或者说是一组内存单元
只不过对与变量的表示方式使用的是数组名加下标的方式
案例:计算方差
6.3 数组的常用属性与方法
数组的属性:
Length:
- 告诉我们数组的长度:数组名.length
- 通过该属性可以改变数组的长度
数组的常用方法
- unshift:在数组的头部添加元素,返回值返回的是新
数组的长度
Shift:删除数组头部的元素,返回值是刚刚删除的元素
- indexOf:查找在数组中重复出现的元素第一次出现的位置
lastindexOf:查找在数组中重复出现的元素最后一次出现的位置
- push:在数组的尾部插入元素,返回值是添加元素后数组的长度
pop:从数组的尾部删除一个元素,返回值是删除的元素
- slice(开始位置的下标,结束位置的下标)
提取数组中指定连续的子数组,前面包括,后面不包括
- splice(开始删除位置的下标,要删除元素的长度,要选择插入或替换的内容)
splice有“剪接”的含义,前面两个参数定义的是“剪”的部分
第三个参数定义的是“接”的部分,经过不同的参数组合,就能实现
以下三个功能:
- 删除操作,删除数组中指定的任意元素
- 插入操作,在数组中指定的位置插入元素
- 替换操作,在数组中替换指定位置的元素
- reverse,将数组中的元素,反序输出,在原数的基础上进行反序输出
不会创建新数组的