摘要:中函數(shù)是一等公民,所有的函數(shù)實際上是一個對象,與其他引用類型一樣擁有著屬性和方法,也可以被外界或者自身調(diào)用,也可以像傳遞參數(shù)一樣將函數(shù)傳遞給另一個函數(shù)。中函數(shù)沒有重載的概念,當(dāng)定義兩個同名函數(shù)的時候,前一個函數(shù)會被覆蓋掉,舉個栗子。
JavaScript中函數(shù)是一等公民,所有的函數(shù)實際上是一個Function對象,與其他引用類型一樣擁有著屬性和方法,也可以被外界或者自身調(diào)用,也可以像傳遞參數(shù)一樣將函數(shù)傳遞給另一個函數(shù)。
JavaScript中函數(shù)沒有重載的概念,當(dāng)定義兩個同名函數(shù)的時候,前一個函數(shù)會被覆蓋掉,舉個栗子。
function add(num){ console.log(num+100) } function add(num){ console.log(num+200) } add(100)//300
為何會沒有函數(shù)重載,是因為JavaScript中函數(shù)定義有以下三種,分別是函數(shù)聲明,函數(shù)表達式以及使用Function構(gòu)造函數(shù)。
//函數(shù)聲明 function add(num){ console.log(num+100) } //函數(shù)表達式 var add=function(num){ console.log(num+200) } //Function構(gòu)造函數(shù) var add=new Function("num","console.log("num+300")") add(100)//400
可以看到,當(dāng)定義同名的函數(shù)的時候,也就相當(dāng)于定義了同名的變量,故而后面的變量會覆蓋掉前面的變量,另外需要注意的是JavaScript作用域中的 hoist,包括變量聲明提升與函數(shù)函數(shù)提升。
對于變量來說,在ES5中var定義的變量會提升到作用域中所有的函數(shù)與語句前面,而ES6中l(wèi)et定義的變量則不會,let聲明的變量會在其相應(yīng)的代碼塊中建立一個暫時性死區(qū),直至變量被聲明。
//var聲明變量 console.log(x === undefined); // "true" var x = 3; //let聲明變量 console.log(x === undefined); // Uncaught ReferenceError: x is not defined let x = 3;
對于函數(shù)來說,函數(shù)聲明會被提升到作用域頂部,而函數(shù)表達式則不會,因而比較穩(wěn)妥的是在最后調(diào)用函數(shù)
//函數(shù)聲明 hoist()// hello world function hoist(){ console.log("hello world") } //函數(shù)表達式 hoist()// hoist is not a function var hoist = function(){ console.log("hello world") }
也可以將函數(shù)作為另一個函數(shù)的結(jié)果返回,若是返回函數(shù)中保存著對外部函數(shù)的引用,會發(fā)生很好玩的情況:
function closure(){ var foo=10; var bar=2; return function(){ return foo*bar; } }; var handle=closure(); console.log(handle());//20
可以看到的是,我們在closure函數(shù)內(nèi)部定義了兩個局部變量,然后返回帶有局部變量操作結(jié)果的匿名函數(shù),將closure函數(shù)執(zhí)行后的結(jié)果(保存著foo,bar變量引用的匿名函數(shù))賦給handle變量,此時執(zhí)行handle函數(shù)可以看到,輸出了closure函數(shù)內(nèi)局部變量操作的結(jié)果,此時我們稱這種現(xiàn)象為閉包,閉包其實是一個函數(shù),在上述栗子中便是指代的closure函數(shù)內(nèi)的匿名函數(shù)。不過值得注意的是,由于閉包會攜帶包含它的外部函數(shù)的整個作用域,故而會很占內(nèi)存,因此要及時釋放變量的引用,不要讓其常駐內(nèi)存,不然會導(dǎo)致內(nèi)存占用過多,最后出現(xiàn)內(nèi)存泄漏的情況。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/84217.html
摘要:和方法大作用致相同,不同的方法接受的參數(shù),必須要明確所有要處理的參數(shù),也就是說,參數(shù)必須要逐個列舉,而方法可以選擇數(shù)組作為參數(shù),因此可以在具體的環(huán)境中,看看是選擇還是方法。 在函數(shù)內(nèi)部有著一個名叫arguments的類數(shù)組對象,內(nèi)部包含著傳入函數(shù)的所有參數(shù),在arguments對象中,有一個名叫callee的屬性,其作用可見下面這個階乘的栗子: function factorial(n...
摘要:極簡爬蟲攻防戰(zhàn)紀(jì)要爬蟲是構(gòu)建搜索引擎的基礎(chǔ)負(fù)責(zé)抓取網(wǎng)頁信息并對網(wǎng)頁識別分類及過濾。爬蟲方終于鎖定了第一場戰(zhàn)役的勝局由于斷崖式技術(shù)的出現(xiàn),反爬方在瀏覽器識別戰(zhàn)役上望風(fēng)披靡。經(jīng)過反爬方的精心運作,逐漸有效削弱了敵方的攻勢。 極簡爬蟲攻防戰(zhàn)紀(jì)要 ? ??爬蟲是構(gòu)建搜索引擎的基礎(chǔ), 負(fù)責(zé)抓取網(wǎng)頁信息并對網(wǎng)頁識別、分類及過濾。我們熟識的電商、搜索、新聞及各大門戶網(wǎng)站都有強大的爬蟲集群在每...
摘要:另外如果為負(fù)數(shù),則表示從字符串尾部開始算起。將要搜尋的子字符串。從當(dāng)前字符串的哪個索引位置開始搜尋子字符串默認(rèn)為。否則則會返回一個數(shù)組,數(shù)組中存放所有符合要求的子字符串,并且沒有和屬性。 原文鏈接 JavaScript 字符串用于存儲和處理文本。因此在編寫 JS 代碼之時她總?cè)缬半S形,在你處理用戶的輸入數(shù)據(jù)的時候,在讀取或設(shè)置 DOM 對象的屬性時,在操作 Cookie 時,在轉(zhuǎn)換各種...
摘要:流程創(chuàng)建一個文件獲取當(dāng)前的活動標(biāo)簽通過行列坐標(biāo)獲取單元格,并向其插入數(shù)據(jù)這里有種方式生成文件并輸入代碼預(yù)覽等價于除非是根目錄設(shè)置當(dāng)前腳本所在目錄實例化類獲取當(dāng)前活動標(biāo)簽填充數(shù)據(jù)方式一姓名性別年齡射可可男男男填充數(shù) 流程 創(chuàng)建一個excel文件 獲取當(dāng)前的活動sheet標(biāo)簽 通過行列坐標(biāo)獲取單元格,并向其插入數(shù)據(jù)(這里有2種方式) 生成文件并輸入showImg(https://seg...
摘要:更多資源請文章轉(zhuǎn)自月份前端資源分享的作用數(shù)組元素隨機化排序算法實現(xiàn)學(xué)習(xí)筆記數(shù)組隨機排序個變態(tài)題解析上個變態(tài)題解析下中的數(shù)字前端開發(fā)筆記本過目不忘正則表達式聊一聊前端存儲那些事兒一鍵分享到各種寫給剛?cè)腴T的前端工程師的前后端交互指南物聯(lián)網(wǎng)世界的 更多資源請Star:https://github.com/maidishike... 文章轉(zhuǎn)自:https://github.com/jsfr...
閱讀 1363·2023-04-26 00:10
閱讀 2461·2021-09-22 15:38
閱讀 3937·2021-09-22 15:13
閱讀 3552·2019-08-30 13:11
閱讀 672·2019-08-30 11:01
閱讀 3069·2019-08-29 14:20
閱讀 3236·2019-08-29 13:27
閱讀 1753·2019-08-29 11:33