引用型別 函式

2021-08-06 01:50:40 字數 4147 閱讀 3665

在ecmascript中,function(函式)型別實際上是物件。每個函式都是function型別的例項,而且都與其他引用型別一樣具有屬性和方法。由於函式是物件,因此函式名實際上也是乙個指向函式物件的指標。
function

sum(num1,num2)

var sum = function

(num1,num2)

var box= new function('num1', 'num2' ,'return num1 + num2');

ps:第三種方式我們不推薦,因為這種語法會導致解析兩次**(第一次解析常規ecmascript**,第二次是解析傳入建構函式中的字串),從而影響效能。但我們可以通過這種語法來理解"函式是物件,函式名是指標"的概念。

函式名僅僅是指向函式的指標,因此函式名和包含物件指標的其他變數一樣。

也就是說,不同的函式名可以指向同乙個函式。

function

hcd(a,b)

alert(hcd(1,2)); //3

var h = hcd; //注意:不帶括號的函式名表示的是訪問函式指標,不是呼叫函式

alert(h(3,2)); //5,因為複製的是指標,其實指向的是同乙個函式

hcd = null; //表示hcd就和函式斷絕關係了,他就不是函式指標了

alert(hcd(0,1)) //hcd is not a function

首先定義了乙個函式hcd,將h設定為與hcd相等,(注意:使用不帶圓括號的函式名是訪問函式指標,而非呼叫函式結果),這時hcd和h就指向同乙個函式。

因為函式的根源是物件,所以將hcd設定為空物件null,就可以將hcd和函式「斷絕關係」。

但是這並不影響h指向函式。

function

h(a)

function

h(b)

alert(h(2));//4

其實和這個是一樣的:

var h = function

(a) h = function

(b) alert(h(2));//4

函式宣告:

解析器會先讀取函式宣告,並使其在執行任何**前可用。

alert(hcd(1,2));//3

function hcd(a,b)

只是因為在解析時將函式宣告放在了**的頂部

函式表示式:

是按**的順序執行的。

alert(hcd(1,2));

var hcd = function(a,b)

這是會報錯誤hcd is not a function;

除了這點差別外,其他是一樣的。

var hcd = function

(a) function

h(b,c)

alert(h(hcd,10));//15

h函式接受兩個引數,第乙個引數為函式,第二個引數為傳遞給改函式的乙個值。

乙個陣列,含有多個物件,根據物件的某一屬性值的大小,對物件進行排序

var data =[,,

,]

function

compare

(s)else

if(value1>value2)else}}

data.sort(compare("age"))

console.log(data[0].age)//8

console.log(data[1].age)//10

console.log(data[2].age)//11

console.log(data[3].age)//20

在函式的內部有兩個特殊的物件:arguments和this
arguments:類陣列物件,包含所有傳入函式中的引數。argument的callee屬性指向該函式。
例如:

常見的遞迴函式

function

hcd(a)else

}console.log(hcd(4))//24

這樣的話就會將執行函式緊緊的與hcd耦合在一起。

下面的方法會更好。

function

hcd(a)else

}console.log(hcd(4))//24

這樣一來:

var text = hcd;

hcd = function

() console.log(text(4))//24

console.log(hcd(24))//0

變數text獲取了hcd的值,其實是在兩外乙個位置上儲存了函式的指標。

this引用的是當前函式執行的環境物件。
wndow.color = "red";

var o = ;

function say()

say(); //

"red"

o.say = say;

o.say(); //

"blue"

say函式為在全域性定義的函式,在呼叫函式前,並不能確定this是那個物件。

當在全域性中呼叫時,this引用的是全域性物件window,換句話說this.color會轉換為window.color。

而當將say函式賦值給o.say()時,this引用的是物件o。

函式就是物件,所以有屬性和方法。

每個函式都有兩個屬性:length,prototype

length:接受引數的個數
function

hcd(a,b)

function

h(a)

alert(hcd.

length); //2

alert(h.

length); //1

function

hcd(a,b)

function

h1(c,d)

function

h2(c,d)

alert(h1(10,10));

alert(h2(10,10));

在全域性環境下呼叫h2和h1,所以傳入hcd的this即為window物件

call:

function

h2(c,d)

window.color = "red";

var o = ;

function

hcd()

//在全域性環境下執行

hcd(); //"red"

//在函式呼叫的環境下執行

hcd.call(this); //"red"

//在全域性環境下執行

hcd.call(window); //"red"

//在o環境下執行

hcd.call(o); //"blue"

bind()
建立乙個函式的例項,this會繫結到傳給bind()函式的值。
window.color = "red";

var o = ;

function

hcd()

var objectsay = hcd.bind(o);

objectsay()//"blue"

hcd()呼叫bind()並傳入物件o,意思就說在環境變數為o的情況下,建立乙個函式例項objectsay。

scala集合型別,函式

scala使用初步介紹 函式 def 建立容器 array 1,2,3 list 1,2,3 array 1,2,3 tolist map k1 1 k2 2 scala.tuple3 1,2,3 1,2,3 取出元素 arr 0 arr 1 list 0 list 1 map k1 tup.1,t...

DOM 文件型別函式

元素 標籤 節點 文字節點 在dom3中被淘汰 文字節點節點查詢1 找子節點 直接後代 childnodes 獲取子節點 包含空格是text children 獲取子節點 2 找父節點 直接父代 parentnode 獲取父代parrentchild 獲取父元素 parentnode 獲取子元素 c...

char型別函式(C 入門?)

前幾天測試,本來想用char自帶的函式 然而發現自己並不是很會。1.1 strcpy 原型 char strcpy char dest,char src 功能 把從src位址開始且含有 0 結束符的字串複製到以dest開始的位址空間 返回指向dest的指標 說明 src 和 dest所指記憶體區域不...