[TOC]
> JavaScript函數(shù)其三:分組中的函數(shù)表達(dá)式
**函數(shù)表達(dá)式和函數(shù)聲明**:
~~~
function foo(){} // 聲明,因?yàn)樗浅绦虻囊徊糠?var bar = function foo(){}; // 表達(dá)式,因?yàn)樗琴x值表達(dá)式的一部分
~~~
**函數(shù)聲明會(huì)在代碼塊中被提到最前面**,而表達(dá)式不會(huì)。
~~~
alert(fn());
function fn() {
return 'Hello world!';
}
~~~
`()`是一個(gè)**分組操作符**,它的內(nèi)部只能包含表達(dá)式,在使用`eval`對(duì) JSON 進(jìn)行執(zhí)行的時(shí)候,JSON 字符串通常被包含在一個(gè)圓括號(hào)里`eval('(' + json + ')')`,這樣做的原因就是因?yàn)榉纸M操作符,也就是這對(duì)括號(hào),會(huì)讓解析器強(qiáng)制將JSON 的花括號(hào)解析成表達(dá)式而不是代碼塊。
**Module模式**
~~~
var Calculator = function (eq) {
//這里可以聲明私有成員
var eqCtl = document.getElementById(eq);
return {
// 暴露公開(kāi)的成員
add: function (x, y) {
var val = x + y;
eqCtl.innerHTML = val;
}
};
};
var calculator = new Calculator('eq');
calculator.add(2, 2);
~~~
每次用的時(shí)候都要 new 一下,也就是說(shuō)每個(gè)實(shí)例在內(nèi)存里都是一份copy。
**匿名閉包**
~~~
(function () {
// ... 所有的變量和function都在這里聲明,并且作用域也只能在這個(gè)匿名閉包里
// ...但是這里的代碼依然可以訪問(wèn)外部全局的對(duì)象
}());
~~~
對(duì) module 進(jìn)行擴(kuò)展,添加新的屬性:
~~~
var module = (function(mod){
mod.moreFunc = function(){};
...
return mod
})(module || (module = {}))
~~~
若module已經(jīng)存在,那么添加新的功能,若不存在,初始化為空對(duì)象再添加功能。
**克隆**
~~~
for (key in old) {
if (old.hasOwnProperty(key)) {
my[key] = old[key];
}
}
~~~
**function的執(zhí)行**
在`function`后面加個(gè)`()`就能執(zhí)行一個(gè)方法,但是有一個(gè)需要注意的地方:
```
function(){}()
```
該句會(huì)報(bào)錯(cuò),原因是方法是聲明式,所以不會(huì)生成一個(gè)有名字的對(duì)象來(lái)供`()`調(diào)用,但是用`()`包圍起來(lái)當(dāng)作表達(dá)式就可以了:
```
(function(){})()
```
- 步入JavaScript的世界
- 二進(jìn)制運(yùn)算
- JavaScript 的版本是怎么回事?
- JavaScript和DOM的產(chǎn)生與發(fā)展
- DOM事件處理
- js的并行加載與順序執(zhí)行
- 正則表達(dá)式
- 當(dāng)遇上this時(shí)
- Javascript中apply、call、bind
- JavaScript的編譯過(guò)程與運(yùn)行機(jī)制
- 執(zhí)行上下文(Execution Context)
- javascript 作用域
- 分組中的函數(shù)表達(dá)式
- JS之constructor屬性
- Javascript 按位取反運(yùn)算符 (~)
- EvenLoop 事件循環(huán)
- 異步編程
- JavaScript的九個(gè)思維導(dǎo)圖
- JavaScript奇淫技巧
- JavaScript:shim和polyfill
- ===值得關(guān)注的庫(kù)===
- ==文章==
- JavaScript框架
- Angular 1.x
- 啟動(dòng)引導(dǎo)過(guò)程
- $scope作用域
- $q與promise
- ngRoute 和 ui-router
- 雙向數(shù)據(jù)綁定
- 規(guī)范和性能優(yōu)化
- 自定義指令
- Angular 事件
- lodash
- Test
