[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小效果
- 字符串截取