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