Lesson 1

概念

javascript的特性

  • single thread
  • single process
  • event driven

什麼是event driven?

所有的東西都是由
「事件」組成

請盡量避免blocking

一些基本語法

// bad
var foo = "bar";

// better
let foo = 'bar';

// great
const foo = 'bar'

變數命名

var foo = 'foo';

...
...
...

var foo = 'bar';

關於var

let foo = 'foo';

...
...
...

// failed, SyntaxError: Identifier 'foo' has already been declared
let foo = 'bar';


// pass
foo = 'bar'

關於let

三者比較

  • var 完全無法追蹤,建議不要使用
  • let 可以用在需要reassign的場景
  • 任何變數宣告請使用 const
const foo = '1'
const bar = 1

// bad
// Output: true
console.log(foo == bar)

// good
// Output: false
console.log(foo === bar)

變數比較

// bad
function foo () {
}

// good
const foo = () => {
}

函式命名

Why? 為什麼?

提升(hoisting)

在執行任何程式碼前,JavaScript 會把函式宣告放進記憶體裡面,這樣做的優點是:可以在程式碼宣告該函式之前使用它。

// Output: foo
foo()

function foo () {
  console.log('foo')
}

For Example

// bad
const foo = 'foo'
const bar = 'bar' + foo

// good
const foo = 'foo'
const bar = `bar${foo}`

字串連結

物件函式宣告

// bad
const foo = {
  bar: () => {}
}

// good
const foo = {
  bar () {

  },
}

解構式

// destruct object
const foo = { bar: 1 }
const { bar } = foo

// Output: 1
console.log(bar)

// destruct array
const foo = [1, 2, 3]
const [element1, element2, element3] = foo

// Output: 1, 2, 3
console.log(element1, element2, element3)

// destruct nested object
const foo = { foo1: { bar: 1 } }
const { foo1: { bar } } = foo

/// Output: 1
console.log(bar)

解構式要注意...

const foo = { foo: { bar: 1 } }

// TypeError: Cannot destructure property `foo2` of 'undefined' or 'null'.
const { foo1: { foo2 } } = foo

// You should...
const { foo1: { foo2 } = {} } = foo

其他的,像是style...

主流的js coding style

進階一點

關於Promise

const fs = require('fs')

fs.readFile('foo1', (errFoo1, binaryFoo1) => {
  fs.readFile('foo2', (errFoo2, binaryFoo2) => {
    fs.readFile('foo3', (errFoo3, binaryFoo3) => {
    
    })
  })
})

古早的callback

const fs = require('bluebird').promisifyAll(require('fs'))

fs.readFile('foo1')
  .then(dataFoo1 => {
    return fs.readFile('foo2')
  })
  .then(dataFoo2 => {
  })

...
...
...

換成Promise後

To be continued...

lesson1

By michael34435

lesson1

  • 991