国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

深入理解JavaScript系列(15) 函數(Functions)

2024-05-06 14:22:05
字體:
來源:轉載
供稿:網友
介紹
本章節我們要著重介紹的是一個非常常見的ECMAScript對象——函數(function),我們將詳細講解一下各種類型的函數是如何影響上下文的變量對象以及每個函數的作用域鏈都包含什么,以及回答諸如像下面這樣的問題:下面聲明的函數有什么區別么?(如果有,區別是什么)。
原文:http://dmitrysoshnikov.com/ecmascript/chapter-5-functions/
代碼如下:
var foo = function () {
...
};

平時的慣用方式:
代碼如下:
function foo() {
...
}

或者,下面的函數為什么要用括號括住?
代碼如下:
(function () {
...
})();

關于具體的介紹,早前面的12章變量對象和14章作用域鏈都有介紹,如果需要詳細了解這些內容,請查詢上述2個章節的詳細內容。

但我們依然要一個一個分別看看,首先從函數的類型講起:

函數類型
在ECMAScript 中有三種函數類型:函數聲明,函數表達式和函數構造器創建的函數。每一種都有自己的特點。
函數聲明
函數聲明(縮寫為FD)是這樣一種函數:
有一個特定的名稱
在源碼中的位置:要么處于程序級(Program level),要么處于其它函數的主體(FunctionBody)中
在進入上下文階段創建
影響變量對象
以下面的方式聲明
代碼如下:
function exampleFunc() {
...
}

這種函數類型的主要特點在于它們僅僅影響變量對象(即存儲在上下文的VO中的變量對象)。該特點也解釋了第二個重要點(它是變量對象特性的結果)——在代碼執行階段它們已經可用(因為FD在進入上下文階段已經存在于VO中——代碼執行之前)。
例如(函數在其聲明之前被調用)
代碼如下:
foo();
function foo() {
alert('foo');
}

另外一個重點知識點是上述定義中的第二點——函數聲明在源碼中的位置:
代碼如下:
// 函數可以在如下地方聲明:
// 1) 直接在全局上下文中
function globalFD() {
// 2) 或者在一個函數的函數體內
function innerFD() {}
}

只有這2個位置可以聲明函數,也就是說:不可能在表達式位置或一個代碼塊中定義它。
另外一種可以取代函數聲明的方式是函數表達式,解釋如下:
函數表達式
函數表達式(縮寫為FE)是這樣一種函數:
在源碼中須出現在表達式的位置
有可選的名稱
不會影響變量對象
在代碼執行階段創建
這種函數類型的主要特點在于它在源碼中總是處在表達式的位置。最簡單的一個例子就是一個賦值聲明:
代碼如下:
var foo = function () {
...
};

該例演示是讓一個匿名函數表達式賦值給變量foo,然后該函數可以用foo這個名稱進行訪問——foo()。
同時和定義里描述的一樣,函數表達式也可以擁有可選的名稱:
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 四川省| 普兰县| 乐亭县| 台南市| 义乌市| 安徽省| 宣恩县| 扎鲁特旗| 木兰县| 交口县| 溧阳市| 上栗县| 昌宁县| 宝清县| 灵宝市| 苍梧县| 龙陵县| 年辖:市辖区| 鄂伦春自治旗| 遵义市| 西乡县| 巴里| 福海县| 喀什市| 囊谦县| 海原县| 仪陇县| 米脂县| 夏邑县| 犍为县| 蕉岭县| 新邵县| 虹口区| 澜沧| 越西县| 塘沽区| 庆元县| 沛县| 乐东| 克拉玛依市| 鄱阳县|