目錄
前言
函式遞回
函式定義
構建函式的方法
代碼展示
函式呼叫以及this的指向
代碼展示
高階函式
概念
嚴格模式
目的
使用模式
嚴格模式帶來的變化
閉包及應用
概念
應用
遞回及應用
概念
應用
總結
前言
作為一個正在學習前端的小白,感覺學到面向物件編程略微的有點吃力,好記性不如爛筆頭,記錄下來準是沒錯的,多寫幾篇博客好好記錄我的學習!這一篇主要是從函式進階、閉包以及遞回總結一下,

函式遞回
函式定義
首先我們要明白:所有的函式都是Function的實體物件,也就是說所有的函式其實都是物件,通過new就可以構造一個函式物件,
構建函式的方法
- 自定義函式:function 函式名(){}
- 匿名函式:var fn = function(){ }
- new Function:var fn = new Function('引數1','引數2',....,'函式體') 注意這里是字串!
代碼展示
<script>
// 自定義函式:function 函式名(){ }
function fn1() {
return "我是一個自定義函式,我的名字叫fn1";
}
// 匿名函式:var fn = function(){ }
var fn2 = function () {
return "我是一個匿名函式,我沒有名字,fn2是接收我的變數名不是我的名字,";
}
// new Function:var fn = new Function('引數1', '引數2',....,'函式體');
var fn3 = new Function('a', 'b','console.log("a和b是我的形參,我是函式體,我們都必須是字串!")');
</script>
函式呼叫以及this的指向

代碼展示
/* 1. 普通函式 */
function fn() {
console.log('人生的巔峰');
}
fn();
/* 2. 物件的方法 */
var o = {
sayHi: function() {
console.log('人生的巔峰');
}
}
o.sayHi();
/* 3. 建構式*/
function Star() {};
new Star();
/* 4. 系結事件函式*/
btn.onclick = function() {}; // 點擊了按鈕就可以呼叫這個函式
/* 5. 定時器函式*/
setInterval(function() {}, 1000); 這個函式是定時器自動1秒鐘呼叫一次
/* 6. 立即執行函式(自呼叫函式)*/
(function() {
console.log('人生的巔峰');
})();
高階函式
概念
高階函式是對其他函式進行操作的函式;函式也是一種資料型別,同樣可以作為引數,傳遞給另外一個引數使用,最典型的就是作為回呼函式,
引數:接收函式作為引數;
回傳值:將函式作為回傳值輸出,
代碼展示
function add(x, y, f) {
return f(x) + f(y);
}
//用代碼驗證一下:
add(-5, 6, Math.abs); // 11
當呼叫add(-5, 6, Math.abs)時,
引數x,y和f分別接收-5,6和函式Math.abs,根據函式定義,可以推導計算程序為:
x = -5; y = 6; f = Math.abs;
f(x) + f(y) ==> Math.abs(-5) + Math.abs(6) ==> 11;
結果就是11;
嚴格模式
目的
1.消除了Javascript語法的一 些不合理、不嚴謹之處,減少了一些怪異行為,
2.消除代碼運行的一些不安全之處,保證代碼運行的安全,
3.提高編譯器效率,增加運行速度,
4.禁用了在ECMAScript的未來版本中可能會定義的一些語法,為未來新版本的Javascript做好鋪墊,比如一些保留字如: class, enum, export, extends, import, super不能做變數名.
使用模式
- 為腳本開啟嚴格模式(IE10)
- 為函式開啟嚴格模式
<script>
(function (){
//在當前的這個自呼叫函式中有開啟嚴格模式,當前函式之外還是普通模式
"use strict";
var num = 10;
function fn() {}
})();
</script>
<script>
"use strict"; //當前script標簽開啟了嚴格模式
</script>
<script>
//當前script標簽未開啟嚴格模式
</script>
嚴格模式帶來的變化
- 變數名 必須先宣告再使用
- 不能隨意洗掉已經宣告的變數(delete語法 洗掉)
- 全域作用域下,普通函式this指向不再是 window 是 undefined
- 建構式不加 new呼叫 this指向 undefined , 給它賦值則會報錯
- 定時器里面的 this 指向仍然是window
- 函式不能有重名的引數
- 不允許在非函式里面使用代碼塊, 非函式舉例:if陳述句 for回圈
閉包及應用
概念
一個函式有權訪問另一個函式作用域中的變數的函式,主要作用就是延伸了變數的作用范圍,主要實作原理就是return一個閉包函式,閉包的區域變數會等所有函式呼叫完畢之后才銷毀,
應用

遞回及應用
概念
如果一個函式在內部可以呼叫其本身,那么這個函式就是遞回函式,簡單理解:函式內部自己呼叫自己, 這個函式就是遞回函式,
注意:遞回函式的作用和回圈效果一樣,由于遞回很容易發生“堆疊溢位”錯誤(stack overflow)形式死回圈,所以必須要加退出條件return,
應用
//利用遞回函式求1~n的階乘 1 * 2 * 3 * 4 * ..n
function fn(n) {
if (n == 1) { //結束條件
return 1;
}
return n * fn(n - 1);
}
console.log(fn(3));//結果為6
總結
這一篇學習日記就先寫到這里!學習永無止境!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/375926.html
標籤:其他
下一篇:少女學習日記——正則運算式專題篇

