javascript之函數(shù)進階詳解
函數(shù)定義方式
function fn(){}//命名函數(shù) var fun=function(){}//匿名函數(shù) // new fn=new Funcion("參數(shù)1","參數(shù)2","函數(shù)體"),很少用。 //所有函數(shù)都是Function的實例對象(函數(shù)也是對象) var fn=new Funcion("a","b","console.log(a+b)") console.log(fn instanceof Object)//true
函數(shù)的調用(6種)
?
?
?
this指向問題
1.普通函數(shù):window
2.對象方法:實例對象obj1
3.構造函數(shù):實例對象。原型對象里面的this指向的也是 ldh這個實例對象
4.綁定事件函數(shù):事件的調用者button1
5.定時器:window
6.立即執(zhí)行函數(shù):window
改變函數(shù)內部this指向:call(),apply(),bind(),
?
?
?如果有的函數(shù)我們不需要立即調用,但是又想改變這個函數(shù)內部的this指向此時用bind
?
?
嚴格模式
?為整個腳本開啟或為函數(shù)開啟:“use strict”;
?嚴格模型的語法規(guī)范:
1.變量使用前必須聲明
2.我們不能隨意刪除已經(jīng)聲明好的變量
3.嚴格模型下的全局作用域中函數(shù)中的this是undefined
4.構造函數(shù)不加new調用,this指向undefined,給undefined賦值會報錯(。以前指向window,相當于給window添加屬性了)
5.定時器this還是指向window 。事件、對象還是指向調用者。
6.參數(shù)不能重名?
7.函數(shù)必須聲明在頂層.新版本的JavaScript 會引入“塊級作用域”(ES6 中已引入)。為了與新版本接軌,不允許在非函數(shù)的代碼塊內聲明函數(shù)。
高階函數(shù)
定義:高階函數(shù)是對其他函數(shù)進行操作的函數(shù),它接收函數(shù)作為參數(shù)(回調函數(shù))或將函數(shù)作為返回值輸出。
閉包
閉包( closure )指有權訪問另一個函數(shù)作用域中變量的函數(shù)。簡單理解就是,一個作用域可以訪問另外一個函數(shù)內部的局部變量。
閉包的作用:延伸變量的作用范圍
閉包練習:
已知:綁定事件、定時器都是異步操作,不會立即執(zhí)行。
(function(i){...})(i) 立即執(zhí)行函數(shù)會立即執(zhí)行,參數(shù)傳給尾部的小括號,function里面的小括號會再次接收這個參數(shù)。立即執(zhí)行函數(shù)也稱作小閉包,里面的所有函數(shù)都可以訪問它內部變量。
(1)點擊輸出當前索引號(面試常見)
?(2)延遲三秒輸出<li>中內容?
?(3)
?
?閉包的思考:
?
遞歸:函數(shù)里面調用自己,需要有結束條件
深拷貝與淺拷貝:
1.淺拷貝:只拷貝最上面一層,深層的對象只拷貝了地址,所以原深層數(shù)據(jù)改變會引起拷貝過來的深層數(shù)據(jù)改變
Object.assign(objNew,objOld)
2.深拷貝:把所有深層數(shù)據(jù)值全部拷貝到新對象里面。新舊兩個對象的數(shù)據(jù)修改互不影響。
相關文章
微信小程序tabBar模板用法實例分析【附demo源碼下載】
這篇文章主要介紹了微信小程序tabBar模板用法,結合具體實例形式分析了tabBar模板的定義、配置、引用等相關操作技巧,需要的朋友可以參考下2017-11-11JavaScript使用IEEE 標準進行二進制浮點運算產(chǎn)生莫名錯誤的解決方法
javascript做帶小數(shù)的計算時,會出現(xiàn)9的循環(huán),以下方法幫助解決。2011-05-05JavaScript該如何學習 怎樣輕松學習JavaScript
JavaScript該如何學習?如何輕松學習JavaScript?這篇文章主要介紹了輕松學習JavaScript的方法2017-06-06Javascript表達式中連續(xù)的 && 和 || 之賦值區(qū)別
了區(qū)分賦值表達式中出現(xiàn)的連續(xù)的 ‘&&’和 ‘||’的不同的賦值含義,做了一個小測試.2010-10-10