首頁 Javascript General
General
11Jan
Javascript Module Pattern
Javascript / General / Eddy Chang 列印 填寫電子郵件
週二, 11 一月 2011 19:51
(1 位用戶參與評分, 當前平均得到 5.00 顆星星)
Module Pattern是由Javascript資深大師Douglas Crockford所提出,最早在2007年時YUI的部落格「A JavaScript Module Pattern」上,有一位工程師Eric Miraglia作了詳盡的說明和範例。之後Douglas Crockford在他的書「JavaScript: The Good Parts」中,也有提到這個部份,這個章節標題為「Module」,摘錄其中一段對於Module的定義說明:

We can use functions and closure to make modules. A module is a function or object that presents an interface but that hides its state and implementation. By using functions to produce modules, we can almost completely eliminate our use of global variables, thereby mitigating one of JavaScript's worst features.

Eric Miraglia在部落格上的第一句話也說:


綜合上面所說明的,這個Module Pattern是由函數和閉包所組成,可以隱藏其中的變數和實作方法(一種封裝),當然,這也是一種避免(或減少)Javascript全局變量的設計模式。本篇收集整理了一些有關模組設計模式的資料和範例:
 
12Nov
Aptana編輯器顯示行號
Javascript / General / Eddy Chang 列印 填寫電子郵件
週五, 12 十一月 2010 21:15
(1 位用戶參與評分, 當前平均得到 5.00 顆星星)

摘錄自:Displaying or hiding line numbers

顯示行號要用下面的步驟來啟用:

  1. 點按編輯器左邊灰色的邊緣

    MarginNoNumbers
  2. 從選單中選擇「Show Line Numbers」,有勾選起來就會顯示了
 
30Oct
Javascript閉包(Closures)之一
Javascript / General / Eddy Chang 列印 填寫電子郵件
週六, 30 十月 2010 23:03
(1 位用戶參與評分, 當前平均得到 5.00 顆星星)
閉包是一個經常使用於Javascript預先定義函式的作法。閉包技術在現在許多程式語言已包含,或有類似概念的作法,事實在早在1960年代就已經在很古老的Schema語言中被實作。閉包的產生是很簡單的概念,在函式中包含的內嵌函式即可產生出閉包,通常還包含有未進行定義數值的變數,稱之為自由變數(free variable)。在許多說法中,會認為閉包並非一個真正的函式,而是一個函式和引用環境組合的個體,行為類似於函式。這種說法的根據是函式只會存在一個實例,而不同的閉包是不同的實例。

最簡單的解說範例是這個,一個用來作相加的函式:
1
2
3
4
5
6
7
8
9
10
11
function makeAdder(x) {  
  return function(y) {  
    return x + y;  
  };  
}  
 
var add5 = makeAdder(5);  
var add10 = makeAdder(10);  
 
alert(add5(2));  // 7  
alert(add10(2)); // 12  

仔細看看執行了add5=makeAdder(5)後,add5的得到數值是什麼?是一個匿名的函式。而add10是另一個匿名的函式。這兩個形成了閉包,但是是共享原先makeAdder函式的定義。

另一個可以觀察每個閉包的獨立性的範例:

 

1
2
3
4
5
6
7
8
9
10
11
function a(){  
 var i=0;  
 function b(){  
 alert(++i);  
 }  
 return b;  
}  
var c = a();  
c(); //i=1
var d=a();
d(); //i=?

在這個範例中的第11行執行後,會出現1還是2的alert視窗?答案很清楚,因為閉包是彼此獨立的執行空間,當然是1。

透過這些技術文章的說明,我歸結出一些關於Javascript閉包的特性如下:

  1. 閉包可以讓你把一些資料和可操作資料的函數聯繫在一起
  2. 閉包使得垃圾回收機制不會收回其中函數所占用的資源

參考資料:
 
24Sep
Google Chrome Frame新發表
Javascript / General / Eddy Chang 列印 填寫電子郵件
週四, 24 九月 2009 21:31
Google在9月22日首次發表了Google Chrome Frame。這個是一個以外掛其他瀏覽器為主的軟體,這個瀏覽器外掛可以讓其他非Google Chrome的瀏覽器(例如Internet Explorer),享受Google Chrome般的功能,例如快速的Javascript執行引擎V8,或是HTML 5新規格的能力。當然,這個首次發佈的版本一開始就針對Internet Explorer,官方部落格上也說明,因為像Internet Explorer不論是6/7/8版本,使用的人數比例,仍然是不容忽視。藉由安裝外掛軟體,可以讓這些使用者比較容易接受,如果是要它們更換另一個瀏覽器,反而是困難的事。

對於網站程式開發者而言,只要使用以下的標籤在網頁中,就可以偵測使用者是不是有安裝這個外掛
<meta http-equiv="X-UA-Compatible" content="chrome=1" />
更多的資訊可以到相關的開發文件去觀看,注意這仍然是一個早期發表的版本,還有許多未完成功能及程式臭蟲。

Tags: chrome | google | 瀏覽器

 
21Sep
Javascript中的函數:基本使用
Javascript / General / Eddy Chang 列印 填寫電子郵件
週一, 21 九月 2009 18:44
(1 位用戶參與評分, 當前平均得到 5.00 顆星星)
函數宣告方式

在Douglas Crockford的「Javascript: The Good Parts」書中,在函數的章節,開宗明義的就說「Functions in JavaScript are objects」。函數本身就是一種物件,和物件的連繫也是密不可分。因為函數是物件,所以也可以存放於變數、物件或陣列之中。在這本書中建議的函式使用方式,都是像下面第二種這樣的:
//一般的函數定義方式
  function add(a,b){
  return a + b;  
  };  
  
  //稱為function literal notation的函數定義方式
  var add = function (a, b) {      
            return a + b;  
  };  
//使用add函數相加兩個數
 var sum=add(1,2);
 //像數值一樣,函數也可以指定(複製)給別的變數
 var sum=add;
 typeof sum;
 
 //刪除add函數之後,sum函數還存在
 delete add;
 typeof sum;
 var result=sum(2,3);

當然函數的宣告方式有很多種,這一種是需要學習的部份,或許這和其他程式語言有些差異。

接下來要了解的是每個函數都有一個自動內建的參數陣列,稱為arguments。像在下面的範例中,可以看到它的功用,利用arguments可以傳入不確定數量的參數值。但是,arguments並不是一個真正的陣列,雖然它有length的屬性,這個部份之後再討論。
function sumOnAll() { 
  var total=0;
  for (i = 0; i < arguments.length; i++) {
    total += arguments[i];
  }
  return total; 
} 

sumOnAll(1,2,6);
sumOnAll(1,1,2,6,7); 
 
第 1 頁, 共 2 頁

最先前一個12下一個最後

關於我something about me

eddy

Eddy Chang

Joomla!台灣站長、資擘(股)軟體工程師

最新留言Latest Comment