1. 程式人生 > 程式設計 >javascript之函式進階詳解

javascript之函式進階詳解

目錄
  • 函式定義方式
  • 函式的呼叫(6種)
  • this指向問題
  • 嚴格模式
  • 高階函式
  • 閉包
  • 遞迴:函式裡面呼叫自己,需要有結束條件

函式定義方式

function fn(){}//命名函式
 
var fun=function(){}//匿名函式
 
// new fn=new Funcion("引數1","引數2","函式體"),很少用。
//所有函式都是Function的例項物件(函式也是物件)
var fn=new Funcion("a","b","console.log(a+b)www.cppcns.com")
console.log(fn instanceof Object)//true

javascript之函式進階詳解

函式的呼叫(6種)

javascript之函式進階詳解

javascript之函式進階詳解

javascript之函式進階詳解

javascript之函式進階詳解

javascript之函式進階詳解

javascript之函式進階詳解

this指向問題

1.普通函式:window

2.物件方法:例項物件obj1

3.建構函式:例項物件。原型物件裡面的this指向的也是 ldh這個例項物件

4.繫結事件函式:事www.cppcns.com件的呼叫者button1

5.定時器:window

6.立即執行函式:window

改變函式內部this指向:call(),apply(),bind(),

javascript之函式進階詳解

javascript之函式進階詳解

javascript之函式進階詳解

如果有的函式我們不需要立即呼叫,但是又想改變這個函式內部的this指向此時用bind

javascript之函式進階詳解

javascript之函式進階詳解

嚴格模式

為整個開啟或為函式開啟:“use strict”;

javascript之函式進階詳解

嚴格模型的語法規範:

1.變數使用前必須宣告

2.我們不能隨意刪除已經宣告好的變數

3.嚴格模型下的全域性作用域中函式中的this是undefined

4.建構函式不加new呼叫,this指向undefined,給undefined賦值會報錯rVbNWavINF(。以前指向window,相當於給window新增屬性了)

javascript之函式進階詳解

5.定時器this還是指向window 。事件、物件還是指向呼叫者。

6.引數不能重名

7.函式必須宣告在頂層.新版本的 會引入“塊級作用域”(ES6 中已引入)。為了與新版本接軌,不允許在非函式的程式碼塊內宣告函式。

javascript之函式進階詳解

高階函式

定義:高階函式是對其他函式進行操作的函式,它接收函式作為引數(回撥函式)或將函式作為返回值輸出。

閉包

閉包( closure )指有權訪問另一個函式作用域中變數的函式。簡單理解就是,一個作用域可以訪問另外一個函式內部的區域性變數。

閉包的作用:延伸變數的作用範圍

javascript之函式進階詳解

閉包練習:

已知:繫結事件、定時器都是非同步操作,不會立即執行。

(function(i){...})(i) 立即執行函式會立即執行,引數傳給尾部的小括號,function裡面的小括號會再次接收這個引數。立即執行函式也稱作小閉包,裡面的所有函式都可以訪問它內部變www.cppcns.com量。

(1)點選輸出當前索引號(面試常見)

javascript之函式進階詳解

(2)延遲三秒輸出<li>中內容

javascript之函式進階詳解

(3)

javascript之函式進階詳解

javascript之函式進階詳解

閉包的思考:

javascript之函式進階詳解

javascript之函式進階詳解

遞迴:函式裡面呼叫自己,需要有結束條件

深拷貝與淺拷貝:

1.淺拷貝:只拷貝最上面一層,深層的物件只拷貝了地址,所以原深層資料改變會引起拷貝過來的深層資料改變

Object.assign(objNew,objOld)

2.深拷貝:把所有深層資料值全部拷貝到新物件裡面。新舊兩個物件的資料修改互不影響。

javascript之函式進階詳解