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
函式的呼叫(6種)
this指向問題
1.普通函式:window
2.物件方法:例項物件obj1
3.建構函式:例項物件。原型物件裡面的this指向的也是 ldh這個例項物件
4.繫結事件函式:事www.cppcns.com件的呼叫者button1
5.定時器:window
6.立即執行函式:window
改變函式內部this指向:call(),apply(),bind(),
如果有的函式我們不需要立即呼叫,但是又想改變這個函式內部的this指向此時用bind
嚴格模式
為整個開啟或為函式開啟:“use strict”;
嚴格模型的語法規範:
1.變數使用前必須宣告
2.我們不能隨意刪除已經宣告好的變數
3.嚴格模型下的全域性作用域中函式中的this是undefined
4.建構函式不加new呼叫,this指向undefined,給undefined賦值會報錯rVbNWavINF(。以前指向window,相當於給window新增屬性了)
5.定時器this還是指向window 。事件、物件還是指向呼叫者。
6.引數不能重名
7.函式必須宣告在頂層.新版本的 會引入“塊級作用域”(ES6 中已引入)。為了與新版本接軌,不允許在非函式的程式碼塊內宣告函式。
高階函式
定義:高階函式是對其他函式進行操作的函式,它接收函式作為引數(回撥函式)或將函式作為返回值輸出。
閉包
閉包( closure )指有權訪問另一個函式作用域中變數的函式。簡單理解就是,一個作用域可以訪問另外一個函式內部的區域性變數。
閉包的作用:延伸變數的作用範圍
閉包練習:
已知:繫結事件、定時器都是非同步操作,不會立即執行。
(function(i){...})(i) 立即執行函式會立即執行,引數傳給尾部的小括號,function裡面的小括號會再次接收這個引數。立即執行函式也稱作小閉包,裡面的所有函式都可以訪問它內部變www.cppcns.com量。
(1)點選輸出當前索引號(面試常見)
(2)延遲三秒輸出<li>中內容
(3)
閉包的思考:
遞迴:函式裡面呼叫自己,需要有結束條件
深拷貝與淺拷貝:
1.淺拷貝:只拷貝最上面一層,深層的物件只拷貝了地址,所以原深層資料改變會引起拷貝過來的深層資料改變
Object.assign(objNew,objOld)
2.深拷貝:把所有深層資料值全部拷貝到新物件裡面。新舊兩個物件的資料修改互不影響。