將zepto-core的源碼下載下來,然后看到最外層的結構是這樣的

首先`window.Zepto`和`window.$`都賦值了`Zepto`這個變量,`Zepto`是個自執行的匿名函數,看源代碼的最后幾行,匿名函數返回了`$`變量
```js
return $
})()
// If `$` is not yet defined, point it to `Zepto`
window.Zepto = Zepto
window.$ === undefined && (window.$ = Zepto)
```
而代碼中有如下幾行,證明`Zepto`最終是個函數。
```js
$ = function(selector, context){
return zepto.init(selector, context)
}
```
可以來測試一下,在運行zepto的頁面中來驗證
```javascript
console.log( typeof window.$ ); // 'function'
```
總結一下,簡單寫來,這個結構可以簡單模擬成這樣:
```javascript
var Zepto = (function(){
var $
// ...省略N行代碼...
$ = function(selector, context){
return zepto.init(selector, context)
}
// ...省略N行代碼...
return $
})()
window.Zepto = Zepto
window.$ === undefined && (window.$ = Zepto)
```
而且,在這里我們還可以看到,平常我們`$('p')`使用zepto的時候,最終順藤摸瓜會執行到`$ = function(selector, context){`這個函數中(其中的內容可不深究),而`p`這個選擇器也會傳遞給`selector`參數。這是我們下一節要講述的內容。