[TOC]
# 基本語法
## 語法
JavaScript每個語句以`;`結束,語句塊用`{...}`。但是,JavaScript并不強制要求在每個語句的結尾加`;`,瀏覽器中負責執行JavaScript代碼的引擎會自動在每個語句的結尾補上`;`。
例如,下面的一行代碼就是一個完整的賦值語句:
~~~javascript
var x = 1;
~~~
> 定義變量可以使用var或者let關鍵字
下面的一行代碼包含兩個語句,每個語句用`;`表示語句結束:
~~~
var x = 1; var y = 2; // 不建議一行寫多個語句!
~~~
語句塊是一組語句的集合,例如,下面的代碼先做了一個判斷,如果判斷成立,將執行`{...}`中的所有語句:
~~~javascript
if (2 > 1) {
x = 1;
y = 2;
z = 3;
}
~~~
注意花括號`{...}`內的語句具有縮進,通常是4個空格。縮進不是JavaScript語法要求必須的,但縮進有助于我們理解代碼的層次,所以編寫代碼時要遵守縮進規則。很多文本編輯器具有“自動縮進”的功能,可以幫助整理代碼。
`{...}`還可以嵌套,形成層級結構:
~~~javascript
if (2 > 1) {
x = 1;
y = 2;
z = 3;
if (x < y) {
z = 4;
}
if (x > y) {
z = 5;
}
}
~~~
JavaScript本身對嵌套的層級沒有限制,但是過多的嵌套無疑會大大增加看懂代碼的難度。遇到這種情況,需要把部分代碼抽出來,作為函數來調用,這樣可以減少代碼的復雜度。
## 注釋
以`//`開頭直到行末的字符被視為行注釋,注釋是給開發人員看到,JavaScript引擎會自動忽略:
~~~
// 這是一行注釋
alert('hello'); // 這也是注釋
~~~
另一種塊注釋是用`/*...*/`把多行字符包裹起來,把一大“塊”視為一個注釋:
~~~
/* 從這里開始是塊注釋
仍然是注釋
仍然是注釋
注釋結束 */
~~~
## 大小寫
請注意,JavaScript嚴格區分大小寫,如果弄錯了大小寫,程序將報錯或者運行不正常。
# 變量與常量
## JavaScript 變量
與代數一樣,JavaScript 變量可用于存放值(比如 x=5)和表達式(比如 z=x+y)。
變量可以使用短名稱(比如 x 和 y),也可以使用描述性更好的名稱(比如 age, sum, totalvolume)。
* 變量必須以字母開頭
* 變量也能以 $ 和 \_ 符號開頭(不過我們不推薦這么做)
* 變量名稱對大小寫敏感(y 和 Y 是不同的變量)
## 變量和常量的聲明
變量聲明使用var,let,常量的定義使用const。
```
var x=1;
let y=2;
const z=3;
```
> 顧名思義,常量是不能改變的量,也就是說定義后不能再次對它賦值,如下的語句會報錯
```
const x=1;
x=x+1;
```
## var和let的區別
在ES6以前,var關鍵字聲明變量。無論聲明在何處,都會被視為聲明在函數的最頂部(不在函數內即在全局作用域的最頂部)。這就是函數變量提升。
例如:
```js
function fn() {
if(bool) {
var name = 'Jack'
} else {
console.log(name)
}
}
```
以上的代碼實際上是:
```javascript
function fn() {
var name // 變量提升
if(bool) {
name = 'Jack'
} else {
//此處訪問name 值為undefined
console.log(name)
}
//此處訪問name 值為undefined
}
```
所以不用關心bool是否為true or false。實際上,無論如何name都會被創建聲明。這種語法規則會帶來很多的歧義。
ES6中,我們通常用let和const來聲明,let表示變量、const表示常量。let和const都是塊級作用域。通俗的講,{}大括號內的代碼塊即為let 和 const的作用域。
let的作用域是在它所在當前代碼塊,但不會被提升到當前函數的最頂部。
```javascript
function fn() {
if(bool) {
//let的作用域,限定在這個語句塊中
let name = 'Jack'
} else {
//超越了name的定義域
//name 在此處訪問不到
console.log(name)
}
}
```
> const定義常量,顧名思義,就是不能改變的量,對常量修改會報錯。 程序中不需要修改的值,或者不允許修改的值盡可能定義為常量,這樣可以減少程序語義上的錯誤。例如:
```javascript
const name = 'Jack'
name = 'Tom' //再次賦值此時會報錯
```
- 內容介紹
- EcmaScript基礎
- 快速入門
- 常量與變量
- 字符串
- 函數的基本概念
- 條件判斷
- 數組
- 循環
- while循環
- for循環
- 函數基礎
- 對象
- 對象的方法
- 函數
- 變量作用域
- 箭頭函數
- 閉包
- 高階函數
- map/reduce
- filter
- sort
- Promise
- 基本對象
- Arguments 對象
- 剩余參數
- Map和Set
- Json基礎
- RegExp
- Date
- async
- callback
- promise基礎
- promise-api
- promise鏈
- async-await
- 項目實踐
- 標簽系統
- 遠程API請求
- 面向對象編程
- 創建對象
- 原型繼承
- 項目實踐
- Classes
- 構造函數
- extends
- static
- 項目實踐
- 模塊
- import
- export
- 項目實踐
- 第三方擴展庫
- immutable
- Vue快速入門
- 理解MVVM
- Vue中的MVVM模型
- Webpack+Vue快速入門
- 模板語法
- 計算屬性和偵聽器
- Class 與 Style 綁定
- 條件渲染
- 列表渲染
- 事件處理
- 表單輸入綁定
- 組件基礎
- 組件注冊
- Prop
- 自定義事件
- 插槽
- 混入
- 過濾器
- 項目實踐
- 標簽編輯
- iView
- iView快速入門
- 課程講座
- 環境配置
- 第3周 Javascript快速入門