JavaScript函式基礎知識概括

2021-09-25 03:18:01 字數 3297 閱讀 7514

目錄

1.函式概念與意義

2.定義函式

(1)宣告函式第一種方法——自定義函式宣告

(2)宣告函式第二種方法——函式表示式

3.函式分類

(1)普通函式

(2)匿名函式

(3)閉包函式

4.函式內部屬性

5.函式屬性和方法

用來完成某種特定動能的**塊,可以有名字,也可以匿名。函式對任何語言來說都是乙個核心的概念。通過函式可以封裝任意多條語句,而且可以在任何地方、任何時候呼叫執行。函式本身就是一種封裝,所以我認為使用函式的意義是可實現封裝一次,終身受益的效果。

一般來說,函式宣告通常由以下幾部分組成:

函式名稱。

函式所需的引數,即arg1、 arg2。乙個函式通常都具有 0 個或多個引數。引數之間用逗號分隔。

函式所要執行的**塊,我們稱之為函式體。

return 子句。函式通常都會有返回值,如果某個函式沒有顯式的返回值,我們就會預設它的返回值為 undefined。

function functionname(arg0, arg1,...,argn)
var variablename = function () ;
注意:

function showname(name)
//變數匿名函式,左側可以為變數、事件等;

var add = function (p1, p2)

add(3,6); //輸出9

//無名稱匿名函式

(function (p1) )(1);

//適用於只需要自動執行一次的場景

如果函式a內部宣告了函式b,函式b引用了函式b之外的變數,並且函式a的返回值為函式b的引用。那麼函式b就是閉包函式。

//全域性引用與區域性引用

function funa()

return funb;

}var allshowa = funa(); //全域性變數引用:累加輸出1,2,3,4,5等

function partshowa()

allshowa是個全域性變數,引用了函式funa。重複執行allshowa(),會輸出1,2,3,4等累加的值。執行函式partshowa(),因為內部只宣告了區域性變數showa來引用funa,執行完畢後因作用域的關係,釋放showa占用的資源。閉包的關鍵就在於作用域:全域性變數占有的資源只有當頁面變換或瀏覽器關閉後才會釋放。var allshowa = funa() 時,相當於allshowa引用了funb(),從而使funb()裡的資源不被gc**,因此funa()裡的資源也不會。 

//有參閉包函式

function funa(arg1,arg2)

return funb;

}var allshowa = funa(2, 3); //呼叫的是funa arg1=2,arg2=3

allshowa(1);//呼叫的是funb step=1,輸出 1

allshowa(3);//呼叫的是funb setp=3,輸出 4

//父函式funa內的變數共享

function funa()

allshowc = function ()

return funb;

}var allshowa = funa();

var allshowb = funa(); //allshowb引用了funa,allshowc在內部重新進行了繫結,與allshowb共享變數i

在函式內部,有兩個特殊的物件: arguments 和 this。其中, arguments 是乙個類陣列物件,包含著傳入函式中的所有引數(且和引數是一一對映關係,改變則另一方也改變)。雖然 arguments 的主要用途是儲存函式引數,但這個物件還有乙個名叫 callee 的屬性,該屬性是乙個指標,指向擁有這個 arguments 物件的函式.

function factorial(num) else 

}

定義階乘函式也可以用遞迴演算法;如上面的**所示,在函式有名字,而且名字以後也不會變的情況下,這樣定義沒有問題。但問題是這個函式的執行與函式名 factorial 緊緊耦合在了一起。為了消除這種緊密耦合的現象,可以像下面這樣使用 arguments.callee。

function factorial(num) else 

}

前面曾經提到過, ecmascript 中的函式是物件,因此函式也有屬性和方法。每個函式都包含兩個屬性: length 和 prototype。其中, length 屬性表示函式希望接收的命名引數的個數,如下面的例子所示。

function sayname(name)

function sum(num1, num2)

function sayhi()

alert(sayname.length); //1

alert(sum.length); //2

alert(sayhi.length); //0

每個函式都包含兩個

特殊的方法:

和 call()

。這兩個方法的用途都是在特定的作用域中呼叫函式,實際上等於設定函式體內

this

物件的值。首先,

方法接收兩個引數:乙個是在其中執行函式的作用域,另乙個是引數陣列。其中,第二個引數可以是

array

的例項,也可以是

arguments

物件。例如:

function sum(num1, num2)

function callsum1(num1, num2)

function callsum2(num1, num2)

alert(callsum1(10,10)); //20

alert(callsum2(10,10)); //20

在上面這個例子中, callsum1()在執行 sum()函式時傳入了 this 作為 this 值(因為是在全域性作用域中呼叫的,所以傳入的就是 window 物件)和 arguments 物件。

function sum(num1, num2)

function callsum(num1, num2)

alert(callsum(10,10)); //20

javascript函式基礎 this基礎

this是函式體內自帶的乙個物件指標,它能夠始終指向呼叫物件 這個this代表的物件由this所在的執行作用域決定的,而不是根據this所在的定義作用域決定。this 屬性 如果this未包含屬性,則直接傳遞的是當前物件 1.this代表當前操作物件 this即代表 物件input 2.this代表...

Android tensorflow 基礎知識學習

今天記錄下tensorflow的一些基本知識 1.匯入tensorflow 庫,且指令碼中新增執行使用的python環境 user bin env python import tensorflow as tf 匯入tensorflow庫 匯入 mnist 資料集 資料在linux 根目錄 data下...

Hyperledger Fabric 基礎知識筆記

區塊鏈可以幫助在競爭者之間或具有相反商業利益的組織之間建立信任,這可能導致爭執。資產在hyperledger fabric中表示為鍵值對的集合,狀態更改記錄為通道 分類賬中的事務。資產可以二進位制和 或json形式表示。chaincode是定義一項或多項資產的軟體,以及用於修改資產的交易指令 換句話...