变量中的作用域
什么是作用域?
变量或者函数可以访问的范围。他控制着变量或函数的可见性和生命周期。
在js中变量或者函数的作用域可分为:
- 函数作用域:只在当前函数内可访问。
- 全局作用域:一经定义,在代码任何位置都可访问。
函数作用域中的变量
等于局部变量,且全局作用域中的变量为全局变量。
声明的提前
js在执行之前,会将左右的声明的变量和function声明的函数,预读到所在作用域的顶部,但是,对变量的赋值,还保留在原来的位置处。
(未声明的变量->undefined)
按值传递
传参时,实际上将 实参 复制了一份副本给了函数。在函数体内对变量进行修改,实际上是不会影响到外部实参变量的。
js的分支结构
程序=数据+算法
程序有三种结构:顺序结构、分支结构、循环结构。
分支结构:
1. if结构
:当条件满足时运行某些语句,当条件不满足时,则不运行这些语句。
if语句内,条件语句块内必须为Boolean的值。如果表达式不是的话,js会自动转换。
if语句块{}可省略,如果省略的话,那么if只控制它下面第一条的语句。
2. if-else结构
:当条件不够时,运行某些语句,当条件不满足时,运行另外的语句。
else-if:复杂/多重if语句,最后else的模块可选择性的添加。
3. switch-case
特殊的分支结构,可根据一个表达式的不同取值,从不同程序入口开始执行。
计算变量/表达式的值,将计算结果与case后数值判断,则执行对应case语句。
switch-case在实现分支结构功能时和if-else的主要区别是什么?
if-else可判断相等或不等的情形适用性更广;switch-case结构更清晰、效率更高;但一般只用于指定变量相等于某个范围的某个值时。
循环:一遍遍重复相同的代码。
循环中的两大要素:1.循环条件:什么时候开始-结束。
2.循环操作:循环体,循环过程中干了什么。
while循环
1.判断条件 2.如果为真,则执行循环操作 3.在判断条件,如为假则退出。(避免条件一直为真,成为死循环)
continue关键字:用在循环中,终止本次循环,执行下次循环。
break关键字:终止整个循环结构。
do-while循环
1.执行循环体 2.在判断循环,如果为真则继续 3.若为假,则终止或者退出
特点:无论满足与否,至少执行一次。
for循环
1.计算表达式的值 2.计算表达式为Boolean表达式的值,如为ture则执行循环体,否则退出。 3.执行循环体,执行表达式3,计算表达式2,如为ture则执行循环体,否退出。4.如此往复,直到表2为false。
数组
内存中连续存储多个数据的数据结构。
算法:解决问题的步骤。
数据结构:数据结构在内存中的存储结构。
1.创建数组,但同时初始化。(已知元素内容)
2.穿那个空数组,在添加元素。
访问数组中的元素:
元素:数组中的每个数据
如何访问:下标,数组中唯一标识每个元素存储位置的序号。
特点:从0开始,连续不重复。
何时:只要访问数组元素,只能用下标。
如何:数组名[i]-用法与单个变量完全一样。
数组GET操作与SET操作
设置数组元素的值-SET
下标从0开始,最大到lenth-1;
var scores=[95,98,100 ];
arr 5[2]=87;//将值为100的元素赋值98
arr 5[3]=98;//在数组尾部添加新元素
GET操作
不会抛出数组下标越界异常。
1.获得数组最后一个元素:arr[arrlength-1]
2.获得倒数第n个元素位置:arr[arrlength-n]
3.数组缩融:减小arr.length的数值,删除结尾多余元素。
4.遍历数组:一次访问数组中每个元素;对每个元素执行相同操作。
如果下标不连续的数组——稀疏数组。
三个不限制:
1.不限制数组元素的个数:长度可变。
2.不限制下标越界
获取元素值:不报错,返回undefined
修改元素的值:不报错,自动在指定位置创建新的元素,并自动修改length+1。
3.不限制元素的数据类型
索引数组:下标为数字的数组。(索引数组中下标无意义)
关联数组:可自定义下标名称。(只要希望每个元素有专门的名称时)
索引数组和关联数组对比
|索引数组| 关联数组 |
|1.以字符串输出|不能以字符串输出|
| 2.下标是数字 | 字符串(自定义) |
|3.length属性有效|无效 |
|4.访问元素均为数组名|
| 5.可用for循环遍历|for-in遍历 |
查找: 遍历 不用遍历
受储存位置的影响 无关
受元素个数的影响 无关
今天就写到这吧。。。我实在是太困了。
这些都是在慕课上学习的笔记,觉得那个老师讲的很好,很全面,比自己W3C强多了。
特此整理,为以后的学习夯实基础。