javascript函数与对象


函数

1. 函数定义与创建

1
2
3
4
5
6
7
8
9
函数就是封装了一段可以重复执行调用的代码块
声明函数
function 函数名 ( ) {
函数体
}
调用函数 函数名( )
函数表达式写法
let 变量名 =function( ){}
调用函数 变量名()

2. 形参与实参

1
2
3
4
5
6
7
8
function 函数名 ( 形参1,形参2......){                  }
函数名 (实参1,实参2....)

如果实参和形参个数一致正常输出结果
如果实参的个数多于形参的个数会取到形参个数
如果实参个数小于形参个数NaN
如果有实参但是没有形参可被函数中的arguments接收成伪数组

3.函数的返回值

1
2
3
4
5
6
7
8
9
10
11
12
function 函数名 ( ){
return 需要返回的结果;
}
函数名( );
函数只实现某种功能最终的结果需要返回给函数调用者
只要遇到return 就把后面的结果返回给调用者
函数名( )=return后面的结果
return 会终止函数 后面不会执行且只能返回一个
return返回后面的值没有return则返回undefined
return 返回多个多个数据使用数组返回
arguments 函数内置接收传递的所以实参 (伪数组)
函数可以调用另一个函数

4.匿名函数与立即执行函数

1
2
3
4
5
6
7
let fn =function (){
//函数体
}
立即执行函数 避免全局变量之间污染
(function (){//语句})()
(function (){//语句}())
//多个立即执行函数之前一定要加;分号

作用域

1.作用域

1
2
3
4
5
6
7
8
9
10
11
12
13
就是代码名字在某个范围内起作用和效果    目的是为了提高程序可靠性
全局作用域
整个script标签或者是一个单独js文件
局部作用域
在函数内部就是局部作用域 这个代码名字只在函数内起效果
块级作用域
在javascript使用{} 包含的代码区域
全局变量 在全局作用域下的变量 在全局可以使用 (如果函数没有声明直接赋值也是全局变量)
局部变量 在局部作用域下变量 函数内部变量 (函数形参也是局部变量)
块级变量 let定义的变量只能在块级作用访问 不能跨块,跨函数访问
两种特殊情况
1. 如果函数内部或者是块级作用域内部变量没有声明直接使用也当全局变量看(不建议使用)
2. 函数内部形参是一种局部变量

2.作用域链

1
2
3
4
5
6
作用域链: 内部函数访问外部函数变量采取的是链式查找向上依次    就近原则
js 引擎 运行js分两步 预解析 代码执行
预解析; js会吧里面所有的var 还有 function 提升到作用域的最前面(let不会有)
然后再代码顺序执行
预解析分为 变量预解析(变量提升)和函数预解析(函数提升)
1.变量提升就是把所有变量声明提升到当前作用域最前面 不提升赋值 函数一样

对象

1.创建对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
创建对象三种方法
1.利用字面量创建对象
var 对象名字 ={
属性名字1: 数据 ,
属性名字2: 数据 ,
方法名: funnction ( ){ 内容 }
}
调用对象属性方法 对象名.属性名 对象名['属性名']
调用对象的方法 对象名.方法名 ( )

2.利用new Object创建队形
var 对象名字 = new Object( )
创建了一个空对象 用等号赋值添加属性和方法;
对象名.属性名='内容';
第三种见高级

遍历对象for (变量 in 对象)
for(var k in 对象){
k k是变量输出 得到属性名
对象名[k] 得到所有属性值
}

2.对象的增删改查

1
2
3
4
5
6
7
8
查询   
对象.属性或者对象['属性'] 对象.方法()
赋值
对象.属性=值 对象.方法=function(){}
新增
对象名.新增属性= 值
删除
delete 对象名.属性名

3.内置对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Math对象
Math.PI 圆周率
Math.max( 数据1,数据2...) 最大值
Math.abs( ) 绝对值
Math.floor( ) 向下取整
Math.ceil( ) 向上取整
Math.round( ) 四舍五入 (.5像大了取负数也是往大了取)
return Math.floor(Math.random() * (max - min + 1)) + min; 包含两个数

Date( )日期对象 是一个构造函数 必须用new来调用
如果没有参数就是返回系统当前时间
常见参数写法 数字型 2021,5,13或者是字符串型 '2021-05-13 8:8:8'
let date= new Date();
console.log(date.getFullYear());//获取当年
console.log(date.getMonth()+1);//获取当月(0-11)
console.log(date.getDate());//获取当天日期
console.log("星期"+(date.getDay()+1));//获取当天星期几周日(0)到周六(6)
console.log(date.getHours());//获取当前小时
console.log(date.getMinutes());//获取当前分钟
console.log(date.getSeconds());//获取当前秒钟
console.log(date.valueOf()); // 今天距离19701.1的毫秒数 时间戳

date.getTime() 简单写法
var 名字 =+new Date( ) 返回总毫秒数
h5新增得到方法 Date.now( )

4. 基本数据类型和引用数据类型

1
2
3
4
5
6
7
8
9
10
11
12
把简单数据类型包装成为复杂数据类型,这样基本数据类型就有了属性和方法
字符串不可变性
指的是里面的值不可变 虽然看上去可以改变内容 但其实是地址变了 内存中开辟了新的内存空间

.indexOf( '要查找的字符',[起始位置]) 返回查找字符索引号 只返回第一个满足的 没有满足就是返回-1
.charAt(index) 根据位置返回字符
.charCodeAt(index) 返回相应索引号字符的ASSCII
str[index] h5新增 获取指定位置处字符
concat('字符串') 拼接字符串
subsrt( '截取起始位置','截取几个字符') 截取字符
replace('被替换字符','替换为字符') 替换字符(只会替换第一个)
split('分隔符') 字符转数组

5.简单类型和复杂类型

image-20230903203422156

6.堆和栈

简单数据类型是存放到栈里面 里面开放一个空间存放数值

复杂数据类型首先再栈里面存放地址 16进制 这个地址指向堆里面是数据

image-20230903203456899