Javascript

Express小入門 - 使用EJS當模組

前陣子在碰Node.js,可以感受到前後台都由 javascript 包辦的爽
感,根本超適合懶惰的工程師!

不過 Node.js 雖然很猛很快,有提供 HTTP, FTP 等函式, 可以用來架 server,但畢竟就是個 javascript engine,要開發 web app 還是靠自己 require 一大堆套件,而且因為套件用一堆有可能讓自己的 app 邏輯變得很不清楚,這樣也不好。

Javascript - this

this 指的是當下 scope 的物件,在此物件裡頭的 (第一層) 函式都可直接使用 this 來呼叫此物件
但如果是函式裡頭又開一個函式 (ex:callback),則會建立一個新 scope,
此時的this通常就會指到新 scope 裡頭一個undefined的物件。

可以先把 this 指派給一個變數,之後到別的 scope(ex: callback) 使用,就不會指錯對象
例如:

var object1 = {
  x : 'x',

  wrong : function() {    
    setTimeout( function(){
      console.log( this.x ) // 錯誤示範,會輸出 undefined
    }, 0);
  },

  right : function() {
    self = this; // 先把 this 給其他變數,之後使用
    setTimeout( function(){
      console.log( self.x ) // 會正確輸出 x
    }, 0);
  }      
}

上面是宣告,我們把他們拿來執行:

object1.wrong();
object1.right();

則出來的結果會是:

undefined
x

另外值得一提的是,javascript 不像 ruby 有 block scope,
只有在創造新的函式時會產生新的 scope,也就是 function scope