函式1
1.函式物件
函式就是物件。
物件是“名\值”對的集合並擁有一個連線到物件原型的隱藏的連線
函式物件連線到Function.prototype上
每個函式物件在建立時,隱藏兩個屬性,即函式的上下文和實現函式行為的程式碼
每個函式在建立時都會攜帶一個prototype屬性,它的值擁有一個constructor屬性且值為該物件的函式
2.函式字面量
函式字面量 = function關鍵字 + 函式名(這裡省略) + 引數(a, b) + body函式體
var add = function (a, b) {
return a + b;
}
alert(add(3, 4)); // 7
3.呼叫
呼叫一個函式即暫停當前函式並把執行權交給新函式。
呼叫的函式除了接受實參外,還將接受this和arguments兩個引數
this的值取決於呼叫的模式:方法呼叫模式、函式呼叫模式、構造器模式和apply呼叫模式
arguments表示接受實參的偽陣列
方法呼叫模式
當一個函式被儲存為一個物件的屬性,我們將這個函式成為方法
當這個方法被呼叫時,this被繫結到該物件
var myObject = {
value : 0,
increment : function (inc) {
alert(this); // [object Object],即myObject物件
this.value += typeof inc === "number" ? inc : 1;
}
}
myObject.increment();
document.writeln(myObject.value); // 1
myObject.increment(2);
document.writeln(myObject.value); // 3
當一個函式被非物件呼叫時,那麼它就是方法呼叫模式
this被繫結到window物件中
window.value = 1;
myObject.one = function () {
var helper = function () {
alert(this.value); // 1,這個匿名函式中的this統統指向window
this.value = add(this.value, this.value);
}
helper();
}
myObject.one();
document.writeln(myObject.value); // 3,沒有變化
document.writeln(this.value); // 2,由add()方法已經改變
解決方法:用that將this保留下來,即把執行環境儲存下來
myObject.two = function () {
var that = this; // 將this代表的myObject物件儲存到that變數中
var helper = function () {
這是that就代表了myObject物件
that.value = add(that.value, that.value);
}
helper();
}
myObject.two();
document.writeln(myObject.value); // 6
document.writeln(this.value); // 1
構造器呼叫模式
如果一個函式在其前面加new呼叫,那麼將建立一個連線到本函式的prototype成員的新物件
而this將會繫結到那個新物件中
var Que = function (string) {
this.name = string;
}
Que.prototype.getName = function () {
return this.name;
}
var q = new Que("no");
alert(q.getName()); // no
Apply呼叫模式
apply函式構建一個陣列並去其去呼叫函式
它接受兩個引數:第一個是將被繫結this的值,第二個是一個陣列
var array = [3, 4];
alert(add.apply(null, array)); // 7, this沒有被強制繫結值,即為window
var nameObject = {
name : "zhangfei"
}
// 將this繫結到nameObject中,並且呼叫Que.prototype.getName方法
alert(Que.prototype.getName.apply(nameObject)); // zhangfei
4.引數
當函式被呼叫時,它會被免費贈送一個arguments引數,它是傳入實參的集合
這使得編寫一個無形成的函式成為可能
var addNoParam = function () {
var res = 0;
for (var i = 0, len = arguments.length; i < len; i++) {
res += arguments[i];
}
return res;
}
alert(addNoParam(1, 3, 4, 5)); // 13
5.返回
當一個函式被呼叫時,它從第一條語句開始執行,直到最後的}結束
return語句可以讓函式提前退出執行。當return語句被呼叫,那麼return之後的語句不會被執行
當函式是構造器函式模式呼叫時,返回this,並非一個物件
return返回預設為undefined,如果沒有指定
相關文章
- 函式式JavaScript(1):引言函式JavaScript
- Mysql 常用函式(1)- 常用函式彙總MySql函式
- 10-函式-1-函式簡介函式
- Sql Server函式全解(1):字串函式SQLServer函式字串
- oracle日期函式(1)Oracle函式
- Oracle分析函式-1Oracle函式
- PHP 函式庫 1 - 函式庫的分類PHP函式
- (譯) 函式式 JS #1:簡介函式JS
- Python旅途——函式(1)Python函式
- 函式返回值1函式
- 函式組: MDR1函式
- 1.自執行函式表示式函式
- 字串函式 sha1_file ()字串函式
- 1. 輔助函式 dd()函式
- day 17 – 1 遞迴函式遞迴函式
- 1:賦值運算子函式賦值函式
- 分析函式學習1 level函式
- 【函式分享】每日PHP函式分享(2021-3-1)函式PHP
- 測開之函式進階· 第1篇《遞迴函式》函式遞迴
- 【函式分享】每日PHP函式分享(2021-1-19)函式PHP
- Lesson12——NumPy 字串函式之 Part1:字串操作函式字串函式
- 3D高斯損失函式(1)單純損失函式3D函式
- [系列文章] 函式 - 記錄1函式
- ?年學 go 1:變數&函式Go變數函式
- WINDOWS未開函式揭密(1) (轉)Windows函式
- SQL入門之2 函式1SQL函式
- 測試TOM=SQLLDR函式使用1SQL函式
- MySQL1:MySQL函式彙總MySql函式
- EXCEL常用函式介紹(1)(轉)Excel函式
- ucosiii(1): 時鐘節拍函式函式
- Vuejs函式式元件,你值得擁有(1)VueJS函式元件
- MySQL函式大全(字串函式,數學函式,日期函式,系統級函式,聚合函式)MySql函式字串
- 學習javaScript必知必會(1)~js介紹、函式、匿名函式、自呼叫函式、不定長引數JavaScriptJS函式
- 1. PHP 函式學習 strpos ()PHP函式
- 前端常用的小函式(1)—解析url前端函式
- JavaScript(1)高階函式filter、map、reduceJavaScript函式Filter
- Python學習-字串函式操作1Python字串函式
- 高質量的程式碼 - 函式(1)函式