什麼是函式?

2022-02-02 23:53:13 字數 3486 閱讀 9735

1、函式是乙個可以多次使用的功能**塊,乙個封閉的(空間),它可以在**裡隨意呼叫。利用函式的封裝可以減少重複**的開發,提高**的利用率。函式可以傳參,利用函式內預先定義的內容對傳入的不同資料引數進行處理。

2、函式也是物件,也可以為值,它可以存在於變數,陣列和物件之中。

3、函式可以當參傳遞給函式,並且由函式返回,另外函式擁有屬性。

4、函式總會有返回值(除了建構函式之外,建構函式預設返回構造器函式呼叫,當構造函式呼叫執行時,會顯示返回)

函式的方法:

let functiona = function() 

let functionb =

functionb.push(function() )

let functionc =

}

函式的呼叫:
functiona()     // 普通函式的呼叫

functionb[0]() // 函式在陣列中的呼叫

functionc.mh() // 函式在物件中的呼叫

函式可以作為引數進行傳遞並可以作為返回值進行返回
let functiond = function(funparms) 

let returnfunparms = functiond(function() )

returnfunparms() // 這是乙個將函式當做引數傳遞的例子

函式也是物件,也就是說函式也擁有屬性
let funnative = function() {}

funnative.property = '小夭同學'

funnative.property // 小夭同學

typeof funnative // "function"

funnative instanceof object // true

funnative.constructor // ƒ function()

建構函式就是用【new】關鍵字來例項化物件的函式,或者是new關鍵字呼叫的普通函式,任何函式都可以作為建構函式存在。建構函式定義時首字母大寫。

作用:用來初始化物件並為其新增屬性和方法,以方便建立大量相同型別的物件,利於使用繼承等高階特性。

缺點:例項化多個物件的時候會重複的建立物件,造成記憶體空間浪費,增大cpu消耗。

demo

function bcx() 

}let oo = new bcx()

用new操作符呼叫乙個建構函式的時候發生以下:

let obj = {}

obj._proto_ = bcx.prototype

bcx.call(obj)

return obj

1、建立乙個空物件 obj

2、將這個空物件的_proto_成員指向了建構函式物件的prototype成員物件

3、將建構函式的作用域賦給新物件,因此bcx函式中的this指向新物件obj,然後再呼叫bcx函式。

4、返回新物件obj。

注意:

當建構函式中沒有返回物件時候,最終new出來的物件會是建構函式的返回值,而不是new過程中生成的物件。僅當建構函式返回值是物件時有效,當不是物件時依舊返回new過程中形成的物件(無論如何new建構函式之後都會返回乙個物件值)

建構函式也可以當做普通函式來呼叫

其他:

當任意乙個普通函式用於建立一類物件時,它就被稱作建構函式或構造器。乙個函式要作為真正的建構函式有如下條件:

1、在函式內部對新物件(this)的屬性進行設定,通常是新增屬性和方法。

2、建構函式可以包含返回語句(不推薦),但返回值必須是this,或者其他非物件型別的值。

普通函式和建構函式的區別
1、普通函式沒有new,建構函式有

2、建構函式首字母大寫(區分普通函式和建構函式)

3、當函式沒有被new呼叫時,建構函式中的this就指向全域性物件的window

prototype1、改下物件下面公用的方法或者屬性,讓公用方法或者屬性在記憶體中存在乙份,可以被其他物件呼叫

2、在原有物件的基礎上,通過prototype進行額外的封裝、拓展

示例:

// 普通寫法

let a1 = [1,2,3,4,5]

let a2 = [2,4,5,6,7]

a1.sum = function()

return temp

}a2.sum = function()

return temp

}console.log(a1.sum(),a2.sum()) // 15 24

// 原型寫法

let a1 = [1,2,3,4,5]

let a2 = [2,4,5,6,7]

array.prototype.sum = function()

return temp

}console.log(a1.sum(),a2.sum()) // 15 24

// 閉包寫法

let a1 = [1,2,3,4,5]

let a2 = [2,4,5,6,7]

function sum(arr)

return temp

}console.log(sum(a1),sum(a2)) // 15 24

注意:

當建構函式自定義屬性名與該建構函式下原型屬性名相同時,建構函式的自定義屬性優先於原型屬性(可以把建構函式理解為內聯樣式),而原型屬性或原型方法可以看做class.

建構函式就是用new關鍵字呼叫的普通函式,可以隨時定義自己的建構函式來建立多個具有同樣屬性的物件,我們可以用instanceof來鑑別物件是被哪個建構函式建立的。每乙個函式都具有prototype屬性,它定義了建構函式所有物件的共享屬性。

1、自定義的屬性和方法放在建構函式裡面

2、共享的屬性和方法掛載在該建構函式的原型下面

3、js查詢變數的機制,是沿著作用域鏈逐級向上查詢,在原型裡-->是原型鏈,建構函式與原型之間的連線就是原型鏈。當訪問物件的屬性時,js首先在自定義的屬性的作用域內查詢改變量是否存在,如果不存在,則會沿著原型鏈向原型下的屬性中查詢該屬性,直至頂層object的原型物件,若是找到則返回,找不到則返回undefined。

什麼是函式

從數學到程式設計,了解什麼是函式!函式 function 的定義通常分為傳統定義和近代定義,函式的兩個定義本質是相同的,只是敘述概念的出發點不同,傳統定義是從運動變化的觀點出發,而近代定義是從集合 對映的觀點出發。函式的近代定義是給定乙個數集a,假設其中的元素為x,對a中的元素x施加對應法則f,記作...

什麼是函式?

1 函式是乙個可以多次使用的功能 塊,乙個封閉的 空間 它可以在 裡隨意呼叫。利用函式的封裝可以減少重複 的開發,提高 的利用率。函式可以傳參,利用函式內預先定義的內容對傳入的不同資料引數進行處理。2 函式也是物件,也可以為值,它可以存在於變數,陣列和物件之中。3 函式可以當參傳遞給函式,並且由函式...

什麼是函式

在7.1章的學習中,作者挑戰了不引用相應的標頭檔案而呼叫函式。一開始,我自然是不知道如何運作的,只能把三個流程打出來,才慢慢認識到作者在幹什麼以及函式的本質 這個函式十分簡單,只要呼叫了標頭檔案string.h,就可以便捷的使用strcmp函式,比較大小。但如果沒有這個標頭檔案呢?在這裡插入描述 在...