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,或者其他非物件型別的值。 複製**
普通函式和建構函式的區別
prototype1、普通函式沒有new,建構函式有
2、建構函式首字母大寫(區分普通函式和建構函式)
3、當函式沒有被new呼叫時,建構函式中的this就指向全域性物件的window
複製**
1、改下物件下面公用的方法或者屬性,讓公用方法或者屬性在記憶體中存在乙份,可以被其他物件呼叫
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,記作...
什麼是函式
在7.1章的學習中,作者挑戰了不引用相應的標頭檔案而呼叫函式。一開始,我自然是不知道如何運作的,只能把三個流程打出來,才慢慢認識到作者在幹什麼以及函式的本質 這個函式十分簡單,只要呼叫了標頭檔案string.h,就可以便捷的使用strcmp函式,比較大小。但如果沒有這個標頭檔案呢?在這裡插入描述 在...
什麼是函式?
1 函式是乙個可以多次使用的功能 塊,乙個封閉的 空間 它可以在 裡隨意呼叫。利用函式的封裝可以減少重複 的開發,提高 的利用率。函式可以傳參,利用函式內預先定義的內容對傳入的不同資料引數進行處理。2 函式也是物件,也可以為值,它可以存在於變數,陣列和物件之中。3 函式可以當參傳遞給函式,並且由函式...