第一周

290 阅读7分钟

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总结

  1. 终止代码继续运行
  2. 函数运行后返回一个结果,只能返回一个

预解析

预解析的过程,就是查找代码中的var和function这两个关键字,找到以后,将变量和函数提前存到内存中,并给他们赋一个初始值,变量的初始值为undefined,函数的初始值为代码段。

总结

  1. 匿名函数赋值给变量的定义方式,预解析时遵循变量的预解析规则,不会将函数代码预解析

  2. 预解析的时候,会将定义提前放在内存中,不会提前将赋值放在内存中

  3. 如果变量名和函数名同名了,保留函数预解析,忽略变量预解析

    因为函数预解析其实包含了赋值的过程,函数定义放在内存中的时候将函数的代码也放在内存中

    变量的预解析只有空间,没有值,所以如果是先预解析变量,那后面的函数预解析赋值就将空间中放入了值,如果是先预解析的函数,再次预解析变量的时候,空间已经存在了,再次定义空间也是没有意义的。

  4. 省略var定义的变量是不会有预解析的

  5. js代码如果报错了,那后面的代码就不会执行了

  6. 不会执行的代码中有变量或函数定义也会预解析,因为预解析在执行之前。

函数的嵌套

函数结构中的大括号,里面放的是代码段,既然是代码段,就可以写判断、循环甚至函数代码,这样就形成了函数的嵌套。

day05

1.作用域

定义

能起到作用的区域就叫做作用域。定义在不同区域的变量,他的作用域是不一样的。

全局变量

全局变量 可以在任意区域起作用

不在任何一个函数中定义的变量叫全局变量。他的作用域是定义之后的所有文档区域

局部变量

在函数中定义的变量叫局部变量。他的作用域是当前这个函数中,函数外不能使用,在局部区域内定义的变量 不能在全局起作用

变量在输出时,首先考虑当前作用域,当前作用域中就会输出当前作用域中的变量,如果当前作用域中没有,才会考虑外面的全局。

2.作用域链

概念

全局可以嵌套局部,局部可以嵌套局部。。。这样由作用域嵌套形成的一条链式结构叫做作用域

作用域链赋值规则

  1. 当使用变量(将变量当做值赋值,输出变量,使用变量计算)的时候,先在当前作用域中找是否定义过变量,如果定义过,就使用;如果没有定义过,就去上一级作用域中找是否定义过,定义过就使用,没有定义就继续去上级作用域中找,......直到找到全局,全局中如果定义过,使用的就是全局中的变量;如果全局中没有定义过,报错:XXX is not defined
  2. 当给一个变量赋值的时候,先在当前作用域中找是否定义过这个变量,如果定义过,就给这个变量赋值;如果没有定义过,就去上级作用域中找是否定义过,找到就赋值,没找到就继续去上级作用域中找,......直到找到全局,全局中定义过,就给这个全局变量赋值,如果全局没有定义过,就在全局定义这个变量并赋值

结论

局部作用域也有预解析,只能在局部预解析,不会影响到全局

3.递归函数

概念

递归函数就是在函数中调用自己

递归函数步骤

  1. 定义一个空函数
  2. 调用 分析实参和返回值
  3. 根据调用语法 编写函数代码
  4. 根据需求先分析

4.事件

概念

js中的事件指的是用户在网页中的行为,例如:鼠标点击、鼠标移动、。。

语法

事件源.on事件类型 = 函数

事件通常由3个要素组成

  1. 事件源:触发事件的标签元素,例如,点击的是div、还是button 。。。
  2. 事件类型:行为的类型,是单击还是双击,还是右击。。。
  3. 事件处理程序:事件触发后要做的事情 - 函数

事件类型

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 对象){ 变量-待变对象中的每个键 }

方法

对象中值的类型是没有限制的,可以是任意类型。当值不是函数的时候,我们将这个键值对叫做对象的属性,当值是一个函数的时候,我们将这个键值对叫做对象的方法。

对象的值是函数的时候,就叫做对象的方法