在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所指記憶體區域不...