函式實際上是物件
每個函式都是 function 型別的例項,而且都與其他引用型別一樣具有屬性和方法。
由於函式是物件,因此函式名實際上也是乙個指向函式物件的指標,不會與某個函式繫結。
//**********===函式宣告式***************
function
sum(num1, num2)
//**********====函式表示式**********====
varsum
=function
(num1, num2)
;
函式是物件,函式名是指標由於函式名僅僅是指向函式的指標,因此函式名與包含物件指標的其他變數沒有什麼不同
function
sum(num1, num2)
alert
(sum(10
,10))
;//20
var anothersum = sum;
alert
(anothersum(10
,10))
;//20
sum =
null
;alert
(anothersum(10
,10))
;//20
檢視物件引用相關
建立第二個名字相同的函式時,實際上覆蓋了引用第乙個函式的變數
var
addsomenumber
=function
(num)
;addsomenumber
=function
(num)
;var result =
addsomenumber
(100);
//300
函式宣告和函式表示式都有宣告提公升,但是函式宣告提公升是提公升整體(函式名和函式體),而函式表示式只提公升變數;
函式名本身就是變數,所以函式也可以作為值來使用
function
callsomefunction
(somefunction, someargument)
function
add10
(num)
var result1 =
callsomefunction
(add10,10)
;alert
(result1)
;//20
訪問函式的指標而不執行函式的話,必須去掉函式名後面的那對圓括號
函式的返回值可以是物件,函式實際上就是物件,因此可以將函式當做返回物件
this引用的是函式據以執行的環境物件——或者也可以說是 this 值(當在網頁的全域性作用域中呼叫函式時,this 物件引用的就是 window)。
window.color =
"red"
;var o =
;function
saycolor()
saycolor()
;//"red"
o.saycolor = saycolor;
o.saycolor()
;//"blue"
函式的名字僅僅是乙個包含指標的變數而已。因此,即使是在不同的環境中執行,全域性的 saycolor()函式與 o.saycolor()指向的仍然是同乙個函式。上面這個函式 saycolor()是在全域性作用域中定義的,它引用了 this 物件。
由於在呼叫函式之前,this 的值並不確定,因此 this 可能會在**執行過程中引用不同的物件。當在全域性作用域中呼叫saycolor()時,this 引用的是全域性物件 window;
換句話說,對 this.color 求值會轉換成對window.color 求值,於是結果就返回了"red"。
而當把這個函式賦給物件 o 並呼叫 o.saycolor()時,this 引用的是物件 o,因此對 this.color 求值會轉換成對 o.color 求值,結果就返回了"blue"。
window.color =
"red"
;var o =
;function
saycolor()
saycolor.
call
(this);
//red
saycolor.
call
(window)
;//red
saycolor.
call
(o);
//blue
varobjectsaycolor
= x =>saycolor.
bind
(x)();
objectsaycolor
(o);
//blue
js第五章引用型別
5.2.6陣列的操作方法 concat 基於當前陣列中的所有項建立乙個新陣列,返回的是新陣列。該方法會先建立當前陣列的乙個副本,然後將接收到的引數新增在這個副本的末尾,最後返回新構建的陣列。slice 選取陣列部分項。兩引數,分別是要返回項的起始和結束位置。splice 向陣列的中部插入項。spli...
js 第五章總結(引用型別)
引用型別的值 物件 是引用型別的乙個例項,它是一種資料結構,用於將資料和功能組織在一起,也常被稱為類。一 object型別 1.建立方式 1 new 操作符 var person new object person.name lili person.age 18 2 物件字面量 var person...
JS 第五章 幾個引用型別簡述
1.let obj new object 會呼叫建構函式 2.let obj 不會呼叫建構函式 1.let atrr obj attr 2.let attr obj.attr 1 建立方法 1.let arr new array 3 規定了長度為3 如果取 arr 3 長度之外 則值為undefin...