在javascript中,函數是一類對象,這表示他可以作為參數傳遞給其他函數;此外,函數還可以提供作用域。
js函數基礎部分:javascript學習筆記(四)function函數部分
建立函數的語法
命名函數表達式
//命名函數表達式
var add = function add(a,b){
return a b;
};
函數表達式
//又稱匿名函數
var add = function(a,b){
return a b;
};
函數的宣告
function foo(){
//code here
} //這裡可以不需要分號
在尾隨的分號中,函數表達式應總是使用分號,而函數的宣告中並不需要分號結尾.
函數宣告與表達式
函數的提升(hoisting)
函數宣告的行為並不等同於命名函數表達式,其差異在於提升(hoisting)行為,看下面例子:
對於所有變量,無論在函數體的何處進行聲明,都會在內部被提升到函數頂部。而對於函數通用適用,原因在於函數只是分配給變數的物件。
提升,顧名思義,就是把下面的東西提到上面。在JS中,就是把定義在後面的東西(變數或函數)提升到前面定義。 從上面的例子可以看出,在函數hoist內部中的foo和bar移動到了頂部,從而覆蓋了全域foo和bar函數。局部函數bar和foo的區別在於,foo被提升到了頂部且能正常運行,而bar()的定義並沒有得到提升,僅有它的聲明被提升,所以,當執行bar()的時候顯示結果為undefined而不是作為函數來使用。
即時函數模式
函數也是對象,因此它們可以作為回傳值。使用自執行函數的好處是直接宣告一個匿名函數,立即使用,省得定義一個用一次就不用的函數,而且免了命名衝突的問題,js中沒有命名空間的概念,因此很容易發生函數名字衝突,一旦命名衝突以最後聲明的為準。
模式一:
<script><br /> (function () {<br /> var a = 1;<br /> return function () {<br /> alert(2);<br /> };<br /> }()());//彈出2,第一個圓括號自執行,第二個圓括號執行內部匿名函數<br /> </script>
模式二:自執行函數變數的指向
模式三:巢狀函數
模式四:自執行函數把它的回傳值賦給變數
var abc = (function () {
var a = 1;
return unction () {
return a;
}
})();//自執行函數把return後面的函數回傳給變數
alert(abc());//如果是alert(abc)就會彈出return語句後面的程式碼;如果是abc(),則會執行return後面的函數
模式五:函數內部執行自身,遞迴
// 這是一個自執行的函數,函數內部執行自身,遞迴
function abc() { abc(); }
回呼模式
回呼函數:當你將一個函數write()作為一個參數傳遞給另一個函數call()時,那麼在某一時刻call()可能會執行(或呼叫)write()。這種情況下,write()就叫做回呼函數(callback function)。
非同步事件監聽器
回調模式有許多用途,例如,當附加一個事件監聽器到頁面上的一個元素時,實際上是提供了一個回調函數的指針,該函數將會在事件發生時被調用。如:
document.addEventListener("click",console.log,false);
上面程式碼範例展示了在文件點擊事件時以冒泡模式傳遞給回調函數console.log()的
javascript特別適用於事件驅動編程,因為回調模式支援程式以非同步方式運作。
超時
使用回呼模式的另一個例子是,使用瀏覽器的window物件所提供的逾時方法:setTimeout()和setInterval(),如:
庫中的回調模式
當設計一個js函式庫時,回呼函數將派上用場,一個函式庫的程式碼應盡可能使用可重複使用的程式碼,而回呼可以幫助實現這種通用化。當我們設計一個龐大的js庫時,事實上,使用者並不會需要其中的大部分功能,而我們可以專注於核心功能並提供「掛鉤形式」的回調函數,這將使我們更容易建立、擴展,以及自訂庫方法
Curry化
Curry化技術是一種透過把多個參數填充到函數體中,實現將函數轉換為一個新的經過簡化的(使之接受的參數更少)函數的技術。 ———【精通JavaScript】
簡單來說,Curry化就是一個轉換過程,也就是我們執行函數轉換的過程。如下例:
當第一次呼叫add()時,它為傳回的內部函數建立了一個閉包。該閉包將原始的x和y值儲存到私人變數oldx和oldy。
現在,我們將可使用任意函數curry的通用方法,如:
何時使用Curry化
當發現正在呼叫同一個函數時,並且傳遞的參數絕大多數都是相同的,那麼該函數可能是用於Curry化的一個很好的候選參數

去掉重复并排序的方法:1、使用“Array.from(new Set(arr))”或者“[…new Set(arr)]”语句,去掉数组中的重复元素,返回去重后的新数组;2、利用sort()对去重数组进行排序,语法“去重数组.sort()”。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于Symbol类型、隐藏属性及全局注册表的相关问题,包括了Symbol类型的描述、Symbol不会隐式转字符串等问题,下面一起来看一下,希望对大家有帮助。

怎么制作文字轮播与图片轮播?大家第一想到的是不是利用js,其实利用纯CSS也能实现文字轮播与图片轮播,下面来看看实现方法,希望对大家有所帮助!

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于对象的构造函数和new操作符,构造函数是所有对象的成员方法中,最早被调用的那个,下面一起来看一下吧,希望对大家有帮助。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于面向对象的相关问题,包括了属性描述符、数据描述符、存取描述符等等内容,下面一起来看一下,希望对大家有帮助。

方法:1、利用“点击元素对象.unbind("click");”方法,该方法可以移除被选元素的事件处理程序;2、利用“点击元素对象.off("click");”方法,该方法可以移除通过on()方法添加的事件处理程序。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于BOM操作的相关问题,包括了window对象的常见事件、JavaScript执行机制等等相关内容,下面一起来看一下,希望对大家有帮助。

foreach不是es6的方法。foreach是es3中一个遍历数组的方法,可以调用数组的每个元素,并将元素传给回调函数进行处理,语法“array.forEach(function(当前元素,索引,数组){...})”;该方法不处理空数组。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

Dreamweaver CS6
視覺化網頁開發工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

WebStorm Mac版
好用的JavaScript開發工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。