[TOC]
# 1. 函数参数
## 1.1 带参函数
~~~
<script>
//带参数的函数
function func(a,b){
console.log(a*b);
}
func(1,5); //5
//es6函数可以默认参数
function test(a=5,b=6){
console.log(a*b);
}
test(); //30
test(6); //36
test(6,7); //42
</script>
~~~
## 1.2 自调函数
~~~
( function() {
alert(10);
}() )
~~~
## 1.3 return
return 就是函数的一个执行结果,return语句执行后,函数终止执行
~~~
<script>
function a(){
// return 1; //1
console.log("a")
return 1; // a 1
}
var b = a();
console.log(b);
</script>
~~~
## 1.3 函数的传参
```
function go(a,b,c){
console.log(a);
console.log(b);
console.log(c);
}
/* JS 传不定参,对参数不敏感 */
go(1);
// 函数的形参,是保存在函数对象的length属性中
console.log(go.length)
```
### 1.3.1 基本类型传参
* 只传值
```
function go(){
console.log(1);
}
go.value = 1;
var see = go;
see.index = 3;
console.log(see.value)
console.log(go.index);
```
### 1.3.2 引用类型传参
* 引用类型既传值,也传址
```
数组是引用类型
var arr = [1,2,3];
var b = arr;
b.push(5);
var c = arr.concat(8);
arr.push(6);
console.log(c); //[1,2,3,5,8]
console.log(arr); //[1,2,3,5,6]
console.log(b) //[1,2,3,5,6]
```
### 1.3.1 参数的存储 arguments
> JS的参数 --> 函数内部有个arguments对象,它用来存放函数传入的参数,是一个类数组对象
```
function go(a,b,c){
console.log(a);
console.log(arguments[0]);
console.log(arguments[2]);
}
go(1,2,3);
```
### 1.3.2 重载
> 重载:函数根据传入的参数不同动态决定,调用那种方法
js 不支持重载
可以使用arguments 对象去模拟重载
```
function go(a){
console.log(a);
}
function go(a,b){
console.log(a,b);
}
function go(){
if(arguments.length == 1){
console.log(arguments[0])
}else if( arguments.length == 2){
console.log(arguments[0]+arguments[1])
}
}
```
# 2 函数的创建方式
## 2.1函数创建的方式有三种方法
* 直接量的方式
* 变量声明的方式
* 构造函数的方式声明
```
方法一
go();
function go(){
console.log("hello world")
}
```
```
声明函数 方法二(不建议使用)
go(); //报错,原因声明提前
var go = function(){
console.log("hello world")
}
```
```
方法三 构造函数的方式声明(不推荐不使用,了解)
var go = new Function("a","console.log(a)");
go(1);
```
### 2.1.1 构造函数
* new :
1.调用了构造函数
2.实例化了一个对象
```
<script>
/*
构造函数:构造一个对象的函数
es6之前,使用构造函数模拟一个类
*/
function Person(name,age){
this.names = name;
this.ages = age;
}
/*
js的继承是基于原型的继承
在原型上定义一个方法,那么所有实例化的对象都共享这个方法
*/
Person.prototype.sayName = function(){
console.log(this.names);
}
/*
new
1.调用了构造函数
2.实例化了一个对象
*/
//this 指向实例化对象
var quan = new Person("全梦妍","3");
console.log(quan.ages);
quan.sayName();
</script>
```
#### 2.1.1.1 属性coustructor
```
构造函数
实例对象有一个coustructor 属性,指向构造函数
var arr = [1,2,3,4]
function Person(name,age){
this.name = name;
this.age = age;
}
var cheng = new Person("cheng",18);
console.log(cheng instanceof Person);
console.log(cheng.coustructor == Person)
```
- 效果实例
- 1.点击增加高度
- 2.tab页面切换
- 3. 列表切换
- 4. 隔行变色
- 5. swiper 轮播
- 6.vue
- 7.定时器
- 8. 向表格中添加数据
- 9 瀑布流
- 1.JavaScript基础
- 1. 变量
- 2. 调试
- 3.数据类型
- 4.转换
- 5.控制语句
- 6.运算
- 7. this
- 8 JSON对象和javascript对象的相互转换
- 2.JavaScript的控制语句
- 1. 基本控制语句
- 2.节点
- 2.1DOM补充
- 3. 函数
- js的模块化如何解决
- 不知道有什么用的
- 4.数组
- 5. String
- 补充
- 6.Ajax
- 1. 原生Ajax
- 2. HTTP/get/post
- 3.jQuery-Ajax
- 4.跨域
- 5.axios
- 6.封装
- Ajax效果
- ajax补充
- 7. 正则
- 1.创建正则表达式
- 2. 正则的api
- 3.正则语法
- 4.例子
- 量词
- 8.面向对象
- 1.原型
- ES6
- 模块化
- 1.回调地狱
- 什么是回调地狱
- 简单封装
- promise解决回调地狱
- generator解决回调地狱
- async解决回调地狱
- 2.封装
- Ajax,promise
- JavaScript难点
- 1. 闭包/作用域
- 2.原型链
- 3. 兼容性
- 适配
- JavaScript小效果
- 字符串截取