JavaScript函數怎麼用?JavaScript函數的屬性和方法的介紹
JavaScript函數是什麼? JavaScript中的函式其實是對象,因為每個函式都是Function這個建構子的實例,具有Funtion建構子定義的屬性和方法。下面我們就來具體看看JavaScript函數的屬性和方法的介紹。
函數名稱其實是指向函數物件的指針,看如下程式碼:
function sum(a,b) { return a + b; } // 相当于把sum的引用地址传递给sum2。 // 注意:不带圆括号的函数名是访问函数指针,而非调用函数 var sum2 = sum; sum2(1,2) // 3 sum = null; sum(2,3) // undefined // 将sum的内存回收,即sum的引用地址变了 sum2(2,3) //5 // 但sum2 还是指向原来的内存地址
上面這個程式碼可以說明函數名稱其實是指向函數物件的指標這個問題。對於上述問題理解之後我們可以進行如下的分析:
1、沒有重載
理解了上面之後,重載相當於給函數變數重新修改了引用的值,因此後面會覆蓋前面的,很容易理解了。
2、函數提升
其實和變數提升類似,就是宣告型函數和表達式定義函數的差別,很簡單
3、作為值的函數
因為函數名稱本身就是一個變量,所以可以作為值傳遞,這裡有一個很好的例子,也是一個很好的程式設計思想,如下:
function getSomeFunction(fn,arg) { return fn(arg); } function add(num) { return num + 10; } function getGreeting(name) { return `Hello ${name}`; } getSomeFunction(add,5) // 15 getSomeFunction(getGreeting,'andy') // Hello andy
還可以從一個函數中傳回另一個函數。例如我們在用數組的一些排序方法或迭代方法的時候,因為傳遞進去的都是一個函數變數作為參數,所以這個參數我們可以用「外部函數返回函數」的方法進行編寫,這樣做的好處是,傳回的函數可以把我們」特定想要規定」的參數傳遞進去進行計算,例如
// 规定利用哪个属性进行排序,如果不填则代表数组从大到小排序 function sortArgFuntion(compareProperty) { //compareProperty是上文中特定想要规定的参数 return function (val1, val2) { if (compareProperty === undefined) { // 如果排序的是数组的值,则用常规的方法 if (val1 > val2) { return 1; } else if (val1 < val2) { return -1; } else { return 0; } } else { // 如果排序的是对象的属性则用该方法 if (val1[compareProperty] > val2[compareProperty]) { return 1; } else if (val1[compareProperty] < val2[compareProperty]) { return -1; } else { return 0; } } } } var data = [{ name: 'andy', age: 25 }, { name: 'Nf', age: 29 }] data.sort(sortArgFuntion('name'))
sort函數的參數是個函數,用於將陣列進行重新排序。而我們將這個函數參數拿出來,就可以更直覺的、多用性更高的去寫這個函數,達到我們想要的效果。同時需要仔細揣摩,理解函數傳回函數的精髓與獨到之處
#4.函數內部屬性
函數內部有兩個特殊變數
arguments
this
arguments
##是類別數組對象,何為類別數組對象呢?可以透過序號進行數組式的存取(如obj[1]),並且有length屬性(對像你不定義length屬性,是沒有length的).類數組只有索引值和長度,沒有數組的各種方法,所以如果要類別陣列呼叫數組的方法,就需要使用Array.prototype.method.call 來實作
this##this是JavaScript非常容易混淆和複雜的一個知識點,他代表什麼完全取決於調用位置,我會但列出一篇總結this。 e.g:
window.color = 'red'; var o = {color:"blue"}; function sayColor() { console.log(this.color) } sayColor(); // red 因为调用位置是全局 o.sayColor = sayColor; o.sayColor(); // blue 因为调用位置是o的对象里
從上面例子我們要知道,函數名字只是一個指針,雖然執行環境不同,全局的sayColor()和函數中的o.sayColor()指向的都是同一個函數
calleres5新加的,他傳回目前函數(必須是函數,物件不行)的呼叫環境,如果呼叫環境是全域,則傳回null。有兩種用法,一種是函數名稱加caller,一種是arguments.callee.caller
function outer() { console.log(outer.caller); //null inner(); }; function inner() { console.log(inner.caller); // outer里的代码 }
5、函數的屬性和方法##因為函數也是對象,所以也有屬性和方法;函數裡面有length和prototype兩個屬性,length指傳入形參的個數
function add(num1,num2) {} console. log(add.length) // 2propertype
對於參考類型而言,propertype是保存所有實例方法的真正所在。 在創建自訂引用類型以及實現繼承,它的作用及其關鍵(到底多關鍵暫時還不太理解,尤其是繼承這個詞:))
es5中propertype不可枚舉,因此不能遍歷。apply() 和call()
兩個參數,第一個參數是在哪個作用域運行,第二個參數apply是傳入的Array或是arguments對象,call是傳入每個值,其餘他兩個一模一樣。這是其中一個例子,用來說明apply和call的作用:
var color = "red"; var o = {color:"blue"}; function sayColor() { alert(this.color) } sayColor(); // red sayColor.call(this); // red sayColor.call(window); // red sayColor.call(o); // blue
var color = "red"; var o = {color:"blue"}; function sayColor() { alert(this.color) } o.sayColor = sayColor; o.sayColor(); //blue
bind方法
bind方法用來建構一個函數的實例,其this物件指向bind規定的作用域。
例如:var color = "red"; var obj = {color:"blue"} function sayColor() { console.log(this.color); } var bindSayColor = sayColor.bind(obj); bindSayColor(); // blue
javascript函數
以上是JavaScript函數怎麼用?JavaScript函數的屬性和方法的介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

如何使用WebSocket和JavaScript實現線上語音辨識系統引言:隨著科技的不斷發展,語音辨識技術已成為了人工智慧領域的重要組成部分。而基於WebSocket和JavaScript實現的線上語音辨識系統,具備了低延遲、即時性和跨平台的特點,成為了廣泛應用的解決方案。本文將介紹如何使用WebSocket和JavaScript來實現線上語音辨識系

WebSocket與JavaScript:實現即時監控系統的關鍵技術引言:隨著互聯網技術的快速發展,即時監控系統在各個領域中得到了廣泛的應用。而實現即時監控的關鍵技術之一就是WebSocket與JavaScript的結合使用。本文將介紹WebSocket與JavaScript在即時監控系統中的應用,並給出程式碼範例,詳細解釋其實作原理。一、WebSocket技

如何利用JavaScript和WebSocket實現即時線上點餐系統介紹:隨著網路的普及和技術的進步,越來越多的餐廳開始提供線上點餐服務。為了實現即時線上點餐系統,我們可以利用JavaScript和WebSocket技術。 WebSocket是一種基於TCP協定的全雙工通訊協議,可實現客戶端與伺服器的即時雙向通訊。在即時線上點餐系統中,當使用者選擇菜餚並下訂單

如何使用WebSocket和JavaScript實現線上預約系統在當今數位化的時代,越來越多的業務和服務都需要提供線上預約功能。而實現一個高效、即時的線上預約系統是至關重要的。本文將介紹如何使用WebSocket和JavaScript來實作一個線上預約系統,並提供具體的程式碼範例。一、什麼是WebSocketWebSocket是一種在單一TCP連線上進行全雙工

JavaScript和WebSocket:打造高效的即時天氣預報系統引言:如今,天氣預報的準確性對於日常生活以及決策制定具有重要意義。隨著技術的發展,我們可以透過即時獲取天氣數據來提供更準確可靠的天氣預報。在本文中,我們將學習如何使用JavaScript和WebSocket技術,來建立一個高效的即時天氣預報系統。本文將透過具體的程式碼範例來展示實現的過程。 We

JavaScript教學:如何取得HTTP狀態碼,需要具體程式碼範例前言:在Web開發中,經常會涉及到與伺服器進行資料互動的場景。在與伺服器進行通訊時,我們經常需要取得傳回的HTTP狀態碼來判斷操作是否成功,並根據不同的狀態碼來進行對應的處理。本篇文章將教你如何使用JavaScript來取得HTTP狀態碼,並提供一些實用的程式碼範例。使用XMLHttpRequest

用法:在JavaScript中,insertBefore()方法用於在DOM樹中插入一個新的節點。這個方法需要兩個參數:要插入的新節點和參考節點(即新節點將要插入的位置的節點)。

JavaScript是一種廣泛應用於Web開發的程式語言,而WebSocket則是一種用於即時通訊的網路協定。結合二者的強大功能,我們可以打造一個高效率的即時影像處理系統。本文將介紹如何利用JavaScript和WebSocket來實作這個系統,並提供具體的程式碼範例。首先,我們需要明確指出即時影像處理系統的需求和目標。假設我們有一個攝影機設備,可以擷取即時的影像數
