day01
变量
计算机内存存储数据的容器,在内存中开辟空间
var 变量名
命名规则
由字母,数字,下划线,$,汉字组成 不能数字开头 不能用关键字
类型
number 数字型
string 字符串类型
boolean 布尔类型
undefined 未定义型
变量定义了但是没赋值
运算
数字运算
+ - * / %
赋值运算
= += -= *= /= %=
比较运算
< > <= >= == === != !==
逻辑运算
&& || !
自增自减
++ --
类型转换
转数字
Number pareInt() paetFloat()
转字符串
String()
转布尔
Boolean()
隐式转换
- +左右两边有一个是字符串,另一个也会转成字符串进行拼接
- 数学运算符号会将他两边的数据都转成数字进行数学运算
- 比较运算符号左右两边有一个是数字,另一个也会转成数字进行数字的大小比较
day02
if
单分支 if(){}
if(){ }else{}
多分支
if(){ }else if(){ }else{}
switch
switch(){ case:.. ... default: break; }
三目运算
判断条件?true:fales;
day03
while
while(){}
do while
do(){ }while
for
for(;;){}
关键字
-
break
- 结束整个循环
-
continue
- 结束这次循环,进行下次循环
day04
函数
函数就是具备某个功能的一个工具。是完成某个功能的一段代码。
语法
function 函数名(){ 代码段 }
调用语法:
函数名()
带参数的函数
function zizeng(a){ // 叫做形参 - 形式上的参数 var b = a + 1; console.log(b); }
匿名函数
既然函数的定义跟变量的定义过程差不多,那函数的定义就可以像变量一样进行。
var f = function(){
}
带返回值的函数
function add(sum){ 。。。 return sum }
return总结
- 终止代码继续运行
- 函数运行后返回一个结果,只能返回一个
预解析
预解析的过程,就是查找代码中的var和function这两个关键字,找到以后,将变量和函数提前存到内存中,并给他们赋一个初始值,变量的初始值为undefined,函数的初始值为代码段。
总结
-
匿名函数赋值给变量的定义方式,预解析时遵循变量的预解析规则,不会将函数代码预解析
-
预解析的时候,会将定义提前放在内存中,不会提前将赋值放在内存中
-
如果变量名和函数名同名了,保留函数预解析,忽略变量预解析
因为函数预解析其实包含了赋值的过程,函数定义放在内存中的时候将函数的代码也放在内存中
变量的预解析只有空间,没有值,所以如果是先预解析变量,那后面的函数预解析赋值就将空间中放入了值,如果是先预解析的函数,再次预解析变量的时候,空间已经存在了,再次定义空间也是没有意义的。
-
省略var定义的变量是不会有预解析的
-
js代码如果报错了,那后面的代码就不会执行了
-
不会执行的代码中有变量或函数定义也会预解析,因为预解析在执行之前。
函数的嵌套
函数结构中的大括号,里面放的是代码段,既然是代码段,就可以写判断、循环甚至函数代码,这样就形成了函数的嵌套。
day05
1.作用域
定义
能起到作用的区域就叫做作用域。定义在不同区域的变量,他的作用域是不一样的。
全局变量
全局变量 可以在任意区域起作用
不在任何一个函数中定义的变量叫全局变量。他的作用域是定义之后的所有文档区域
局部变量
在函数中定义的变量叫局部变量。他的作用域是当前这个函数中,函数外不能使用,在局部区域内定义的变量 不能在全局起作用
变量在输出时,首先考虑当前作用域,当前作用域中就会输出当前作用域中的变量,如果当前作用域中没有,才会考虑外面的全局。
2.作用域链
概念
全局可以嵌套局部,局部可以嵌套局部。。。这样由作用域嵌套形成的一条链式结构叫做作用域
作用域链赋值规则
- 当使用变量(将变量当做值赋值,输出变量,使用变量计算)的时候,先在当前作用域中找是否定义过变量,如果定义过,就使用;如果没有定义过,就去上一级作用域中找是否定义过,定义过就使用,没有定义就继续去上级作用域中找,......直到找到全局,全局中如果定义过,使用的就是全局中的变量;如果全局中没有定义过,报错:XXX is not defined
- 当给一个变量赋值的时候,先在当前作用域中找是否定义过这个变量,如果定义过,就给这个变量赋值;如果没有定义过,就去上级作用域中找是否定义过,找到就赋值,没找到就继续去上级作用域中找,......直到找到全局,全局中定义过,就给这个全局变量赋值,如果全局没有定义过,就在全局定义这个变量并赋值
结论
局部作用域也有预解析,只能在局部预解析,不会影响到全局
3.递归函数
概念
递归函数就是在函数中调用自己
递归函数步骤
- 定义一个空函数
- 调用 分析实参和返回值
- 根据调用语法 编写函数代码
- 根据需求先分析
4.事件
概念
js中的事件指的是用户在网页中的行为,例如:鼠标点击、鼠标移动、。。
语法
事件源.on事件类型 = 函数
事件通常由3个要素组成
- 事件源:触发事件的标签元素,例如,点击的是div、还是button 。。。
- 事件类型:行为的类型,是单击还是双击,还是右击。。。
- 事件处理程序:事件触发后要做的事情 - 函数
事件类型
onclick 鼠标单击 ondbclick 鼠标双击 onmouuseover 鼠标移入 onmouseout 鼠标移出 onkeydown 键盘按下 onkeyup 键盘抬起 onfocus 输入框获取焦点 onblur 失去焦点 onchange 标签内容变化 onsubmit 提交事件 onload 网页加载完成后 window.onload
事件的其他写法
// 给事件赋值函数名称 btn.onclick = fn function fn(){ console.log('点击了按钮') } // 给事件赋值变量名 - 值是函数 var fn = function(){ console.log('点击了按钮') }
js可以像css一样有3种写法:
- 行内写法:事件
- 内联写法:平常写的代码
- 外联写法:项目中要将js代码放在一个文件中,在html中引入js文件
5.对象
定义
var obj = {};
键和值之间使用冒号隔开的 键值对之间使用逗号隔开的 键都是字符串,只是可以省略引号但是这个字符串不可以有歧义,例如,包含了+-*、
对象的基本操作
访问
对象.键 -这种方式的属性名不用加引号
对象[键] - 这种方式的属性名必须加引号
删除
delete 对象.键
遍历
遍历的意思就是将每一个值都访问一遍。
遍历对象:将对象中每个键值对都经历一次
语法:
for (var 变量 in 对象){ 变量-待变对象中的每个键 }
方法
对象中值的类型是没有限制的,可以是任意类型。当值不是函数的时候,我们将这个键值对叫做对象的属性,当值是一个函数的时候,我们将这个键值对叫做对象的方法。
对象的值是函数的时候,就叫做对象的方法