# 快速入門
JavaScript代碼可以直接嵌在網頁的任何地方,不過通常我們都把JavaScript代碼放到`<head>`中:
```
<html>
<head>
<script>
alert('Hello, world');
</script>
</head>
<body>
...
</body>
</html>
```
由`<script>...</script>`包含的代碼就是JavaScript代碼,它將直接被瀏覽器執行。
第二種方法是把JavaScript代碼放到一個單獨的`.js`文件,然后在HTML中通過`<script src="..."></script>`引入這個文件:
```
<html>
<head>
<script src="/static/js/abc.js"></script>
</head>
<body>
...
</body>
</html>
```
這樣,`/static/js/abc.js`就會被瀏覽器執行。
把JavaScript代碼放入一個單獨的`.js`文件中更利于維護代碼,并且多個頁面可以各自引用同一份`.js`文件。
可以在同一個頁面中引入多個`.js`文件,還可以在頁面中多次編寫`<script> js代碼... </script>`,瀏覽器按照順序依次執行。
有些時候你會看到`<script>`標簽還設置了一個`type`屬性:
```
<script type="text/javascript">
...
</script>
```
但這是沒有必要的,因為默認的`type`就是JavaScript,所以不必顯式地把`type`指定為JavaScript。
## 如何編寫JavaScript
可以用任何文本編輯器來編寫JavaScript代碼。這里我們推薦以下幾種文本編輯器:
### Sublime Text
免費,但不注冊會不定時彈出提示框。
### Notepad++
免費
_注意_:不可以用Word或寫字板來編寫JavaScript或HTML,因為帶格式的文本保存后不是_純文本文件_,無法被瀏覽器正常讀取。
## 如何運行JavaScript
要讓瀏覽器運行JavaScript,必須先有一個HTML頁面,在HTML頁面中引入JavaScript,然后,讓瀏覽器加載該HTML頁面,就可以執行JavaScript代碼。
你也許會想,直接在我的硬盤上創建好HTML和JavaScript文件,然后用瀏覽器打開,不就可以看到效果了嗎?
這種方式運行部分JavaScript代碼沒有問題,但由于瀏覽器的安全限制,以`file://`開頭的地址無法執行如聯網等JavaScript代碼,最終,你還是需要架設一個Web服務器,然后以`http://`開頭的地址來正常執行所有JavaScript代碼。
不過,開始學習階段,你無須關心如何搭建開發環境的問題,我們提供在頁面輸入JavaScript代碼并直接運行的功能,讓你專注于JavaScript的學習。
試試直接點擊“Run”按鈕執行下面的JavaScript代碼:
```
// 以//開頭直到行末的是注釋,將被瀏覽器忽略
// 第一個JavaScript代碼:
alert('Hello, world');
```
瀏覽器將彈出一個對話框,顯示“Hello, world”。你也可以修改兩個單引號中間的內容,再試著運行。
## 調試
俗話說得好,“工欲善其事,必先利其器。”,寫JavaScript的時候,如果期望顯示`ABC`,結果卻顯示`XYZ`,到底代碼哪里出了問題?不要抓狂,也不要泄氣,作為小白,要堅信:JavaScript本身沒有問題,瀏覽器執行也沒有問題,有問題的一定是我的代碼。
如何找出問題代碼?這就需要調試。
怎么在瀏覽器中調試JavaScript代碼呢?
首先,你需要安裝Google Chrome瀏覽器,Chrome瀏覽器對開發者非常友好,可以讓你方便地調試JavaScript代碼。從這里[下載Chrome瀏覽器](https://www.google.com/chrome/browser/desktop/index.html?system=true&standalone=1)。打開網頁出問題的童鞋請移步[國內鏡像](http://pan.baidu.com/s/1qWMaZSg#path=%252Fchrome)。
安裝后,隨便打開一個網頁,然后點擊菜單“查看(View)”-“開發者(Developer)”-“開發者工具(Developer Tools)”,瀏覽器窗口就會一分為二,下方就是開發者工具:

先點擊“控制臺(Console)“,在這個面板里可以直接輸入JavaScript代碼,按回車后執行。
要查看一個變量的內容,在Console中輸入`console.log(a);`,回車后顯示的值就是變量的內容。
關閉Console請點擊右上角的“×”按鈕。請熟練掌握Console的使用方法,在編寫JavaScript代碼時,經常需要在Console運行測試代碼。
如果你對自己還有更高的要求,可以研究開發者工具的“源碼(Sources)”,掌握斷點、單步執行等高級調試技巧。
## 練習
打開[新浪首頁](http://www.sina.com.cn/),然后查看頁面源代碼,找一找引入的JavaScript文件和直接編寫在頁面中的JavaScript代碼。然后在Chrome中打開開發者工具,在控制臺輸入`console.log('Hello');`,回車查看JavaScript代碼執行結果。
- JavaScript教程
- JavaScript簡介
- 快速入門
- 基本語法
- 數據類型和變量
- 字符串
- 數組
- 對象
- 條件判斷
- 循環
- Map和Set
- iterable
- 函數
- 函數定義和調用
- 變量作用域
- 方法
- 高階函數
- map/reduce
- filter
- sort
- 閉包
- 箭頭函數
- generator
- 標準對象
- Date
- RegExp
- JSON
- 面向對象編程
- 創建對象
- 原型繼承
- 瀏覽器
- 瀏覽器對象
- 操作DOM
- 更新DOM
- 插入DOM
- 刪除DOM
- 操作表單
- 操作文件
- AJAX
- Promise
- Canvas
- jQuery
- 選擇器
- 層級選擇器
- 查找和過濾
- 操作DOM
- 修改DOM結構
- 事件
- 動畫
- 擴展
- underscore
- Collections
- Arrays
- Functions
- Objects
- Chaining
- Node.js
- 安裝Node.js和npm
- 第一個Node程序
- 模塊
- 基本模塊
- fs
- stream
- http
- buffer
- Web開發
- koa
- mysql
- swig
- 自動化工具
- 期末總結
- Python 2.7教程
- Python簡介
- 安裝Python
- Python解釋器
- 第一個Python程序
- 使用文本編輯器
- 輸入和輸出
- Python基礎
- 數據類型和變量
- 字符串和編碼
- 使用list和tuple
- 條件判斷和循環
- 使用dict和set
- 函數
- 調用函數
- 定義函數
- 函數的參數
- 遞歸函數
- 高級特性
- 切片
- 迭代
- 列表生成式
- 生成器
- 函數式編程
- 高階函數
- map/reduce
- filter
- sorted
- 返回函數
- 匿名函數
- 裝飾器
- 偏函數
- 模塊
- 使用模塊
- 安裝第三方模塊
- 使用__future__
- 面向對象編程
- 類和實例
- 訪問限制
- 繼承和多態
- 獲取對象信息
- 面向對象高級編程
- 使用__slots__
- 使用@property
- 多重繼承
- 定制類
- 使用元類
- 錯誤、調試和測試
- 錯誤處理
- 調試
- 單元測試
- 文檔測試
- IO編程
- 文件讀寫
- 操作文件和目錄
- 序列化
- 進程和線程
- 多進程
- 多線程
- ThreadLocal
- 進程 vs. 線程
- 分布式進程
- 正則表達式
- 常用內建模塊
- collections
- base64
- struct
- hashlib
- itertools
- XML
- HTMLParser
- 常用第三方模塊
- PIL
- 圖形界面
- 網絡編程
- TCP/IP簡介
- TCP編程
- UDP編程
- 電子郵件
- SMTP發送郵件
- POP3收取郵件
- 訪問數據庫
- 使用SQLite
- 使用MySQL
- 使用SQLAlchemy
- Web開發
- HTTP協議簡介
- HTML簡介
- WSGI接口
- 使用Web框架
- 使用模板
- 協程
- gevent
- 實戰
- Day 1 - 搭建開發環境
- Day 2 - 編寫數據庫模塊
- Day 3 - 編寫ORM
- Day 4 - 編寫Model
- Day 5 - 編寫Web框架
- Day 6 - 添加配置文件
- Day 7 - 編寫MVC
- Day 8 - 構建前端
- Day 9 - 編寫API
- Day 10 - 用戶注冊和登錄
- Day 11 - 編寫日志創建頁
- Day 12 - 編寫日志列表頁
- Day 13 - 提升開發效率
- Day 14 - 完成Web App
- Day 15 - 部署Web App
- Day 16 - 編寫移動App
- 期末總結
- Python3教程
- Python簡介
- 安裝Python
- Python解釋器
- 第一個Python程序
- 使用文本編輯器
- Python代碼運行助手
- 輸入和輸出
- Python基礎
- 數據類型和變量
- 字符串和編碼
- 使用list和tuple
- 條件判斷
- 循環
- 使用dict和set
- 函數
- 調用函數
- 定義函數
- 函數的參數
- 遞歸函數
- 高級特性
- 切片
- 迭代
- 列表生成式
- 生成器
- 迭代器
- 函數式編程
- 高階函數
- map/reduce
- filter
- sorted
- 返回函數
- 匿名函數
- 裝飾器
- 偏函數
- 模塊
- 使用模塊
- 安裝第三方模塊
- 面向對象編程
- 類和實例
- 訪問限制
- 繼承和多態
- 獲取對象信息
- 實例屬性和類屬性
- 面向對象高級編程
- 使用__slots__
- 使用@property
- 多重繼承
- 定制類
- 使用枚舉類
- 使用元類
- 錯誤、調試和測試
- 錯誤處理
- 調試
- 單元測試
- 文檔測試
- IO編程
- 文件讀寫
- StringIO和BytesIO
- 操作文件和目錄
- 序列化
- 進程和線程
- 多進程
- 多線程
- ThreadLocal
- 進程 vs. 線程
- 分布式進程
- 正則表達式
- 常用內建模塊
- datetime
- collections
- base64
- struct
- hashlib
- itertools
- XML
- HTMLParser
- urllib
- 常用第三方模塊
- PIL
- virtualenv
- 圖形界面
- 網絡編程
- TCP/IP簡介
- TCP編程
- UDP編程
- 電子郵件
- SMTP發送郵件
- POP3收取郵件
- 訪問數據庫
- 使用SQLite
- 使用MySQL
- 使用SQLAlchemy
- Web開發
- HTTP協議簡介
- HTML簡介
- WSGI接口
- 使用Web框架
- 使用模板
- 異步IO
- 協程
- asyncio
- async/await
- aiohttp
- 實戰
- Day 1 - 搭建開發環境
- Day 2 - 編寫Web App骨架
- Day 3 - 編寫ORM
- Day 4 - 編寫Model
- Day 5 - 編寫Web框架
- Day 6 - 編寫配置文件
- Day 7 - 編寫MVC
- Day 8 - 構建前端
- Day 9 - 編寫API
- Day 10 - 用戶注冊和登錄
- Day 11 - 編寫日志創建頁
- Day 12 - 編寫日志列表頁
- Day 13 - 提升開發效率
- Day 14 - 完成Web App
- Day 15 - 部署Web App
- Day 16 - 編寫移動App
- FAQ
- 期末總結
- Git教程
- Git簡介
- Git的誕生
- 集中式vs分布式
- 安裝Git
- 創建版本庫
- 時光機穿梭
- 版本回退
- 工作區和暫存區
- 管理修改
- 撤銷修改
- 刪除文件
- 遠程倉庫
- 添加遠程庫
- 從遠程庫克隆
- 分支管理
- 創建與合并分支
- 解決沖突
- 分支管理策略
- Bug分支
- Feature分支
- 多人協作
- 標簽管理
- 創建標簽
- 操作標簽
- 使用GitHub
- 自定義Git
- 忽略特殊文件
- 配置別名
- 搭建Git服務器
- 期末總結