<?xml version="1.0" encoding="UTF-8"  standalone="yes" ?>
<rss version="2.0">
	<channel>
		<title>社群: Web Programming - 文件區(Function)</title>
		<description>台灣數位學習數位教學平台 RSS feed provider</description>
		<language>zh-tw</language>
		<link>http://lms.xms.com.tw/board.php?courseID=100&amp;f=doclist&amp;folderID=1016</link>
	<item>
		<title>事件處理與 this 環境變數</title>
		<link>http://lms.xms.com.tw/board.php?courseID=100&amp;f=doc&amp;cid=4336</link>
		<description>
隱含的環境參數 this
// method ，代表此 method 的物件
var rect&amp;nbsp; = {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; width: 10, height: 10,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; setSize: function(w, h) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.width = w, this.height = h;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
}
rect.setSize(20, 20);
&amp;nbsp;
// 一般 function，全域物件
var a = 0;
function f()
{
&amp;nbsp;&amp;nbsp;&amp;nbsp; var a&amp;nbsp;= 1;
&amp;nbsp;&amp;nbsp;&amp;nbsp; alert (this.a); &amp;nbsp;// 0
&amp;nbsp;&amp;nbsp;&amp;nbsp; alert(a); &amp;nbsp;// 1
}
&amp;nbsp;
// 
&amp;lt;div id=foo&amp;gt;click me!&amp;lt;/div&amp;gt;
&amp;lt;script&amp;gt;&amp;nbsp; function obj(el) {&amp;nbsp;&amp;nbsp;&amp;nbsp; this.id = 1;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.el = el;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.el.onclick = this.clickHandler;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp; obj.prototype.handler = function(event) {&amp;nbsp;&amp;nbsp;&amp;nbsp; alert(this.id);&amp;nbsp; }&amp;nbsp; &amp;nbsp; var a = new obj(document.getElementById(&quot;foo&quot;));&amp;nbsp; a.handler();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// 隱性地傳入 a 物件當做 handler 中的 this&amp;nbsp; a.handler.call(a.el); // call 的第一個參數傳入 a.el 當做 handler 中的 this
&amp;nbsp; // click div 時，browser 會將 dom 元素傳入當做 handler 中的 this
&amp;lt;/script&amp;gt;   </description>
		<pubDate>Mon, 07 Feb 2011 12:40:20 +0800</pubDate>
	</item>
	<item>
		<title>函式基礎</title>
		<link>http://lms.xms.com.tw/board.php?courseID=100&amp;f=doc&amp;cid=1927</link>
		<description>定義與呼叫
function print(x, y, z)
{
&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!z) z = 3; // 未傳遞的參數 z 會設成 undefined，使用預設值的小技巧, or&amp;nbsp;z = z || 3;
&amp;nbsp;&amp;nbsp;&amp;nbsp; alert(x + &quot; &quot; + y);&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; // 如果沒有 return，則傳回 undefined 
&amp;nbsp;&amp;nbsp;&amp;nbsp; // variable: call by value, object: call by reference
}
print(&quot;hello&quot;, &quot;world&quot;);函式 expression and declarationvar f = function() { ... } &amp;nbsp;// expressionfunction() { ... } &amp;nbsp;// declaration，不可以設定給變數 or 當成參數
&amp;nbsp;
&amp;nbsp;
巢狀函式
function a(x)
{
&amp;nbsp;&amp;nbsp;&amp;nbsp; function b(x) { return x; }&amp;nbsp; // 定義在函式裏，僅限於函式內使用
&amp;nbsp;&amp;nbsp;&amp;nbsp; return x * b(x);
}
&amp;nbsp;
&amp;nbsp;
函式 literal (沒有名子，anonymous function)
var f = function(x) { return x; } // 函式的參考值存在變數 f 中
var f = function fact(x) { if (x&amp;lt;=1) return 1; else return x * fact(x-1); } // fact 只用於函式內部參考
&amp;nbsp;
&amp;nbsp;
不定參數 (arguments 物件)
function max(/* ... */)
{
&amp;nbsp;&amp;nbsp;&amp;nbsp; var m = Number.NEGATIVE_INFINITY;
&amp;nbsp;&amp;nbsp;&amp;nbsp; for (var i=0; i&amp;lt;arguments.length; i++)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (arguments[i]&amp;nbsp;&amp;gt; m) m = arguments[i];
&amp;nbsp;&amp;nbsp;&amp;nbsp; return m;
}
&amp;nbsp;
// deprecated, arguments.callee 代表目前執行的函式，ex 沒有函數名稱的遞回
function(x)
{
&amp;nbsp;&amp;nbsp;&amp;nbsp; if (x&amp;lt;=1) return 1; else return x * arguments.callee(x-1);
}
&amp;nbsp;
&amp;nbsp;
物件當參數 (name/value 關係，比較不會亂，也可以傳指定的參數)
function arycpy(args)
{
&amp;nbsp;&amp;nbsp;&amp;nbsp; arraycopy(args.from, args.from_start || 0, // 預設值
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;args.to, args.to_start || 0,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;args.len);
}
var a = [1, 2, 3, 4];
var b = new Array(4);
arycpy({from:a , to:b, len:4});
&amp;nbsp;
&amp;nbsp;
函式當參數
function f2(f, a, b) { return f(a, b); }
f2(function(x,y) { return x-y; }, a, b);
&amp;nbsp;
&amp;nbsp;
檢查參數的型別 (typeof, instanceof)
funciton f(x)
{
&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!x) // undefined, null
&amp;nbsp;&amp;nbsp;&amp;nbsp; typeof&amp;nbsp;v == &quot;number,boolean,string,function,object,undefined&quot;)，如果是 array, null 會是 object
&amp;nbsp;&amp;nbsp;&amp;nbsp; x instanceof Array // 針對 object
&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; function test() {};&amp;nbsp; &amp;nbsp; var a = new test();&amp;nbsp; &amp;nbsp; console.log(a instanceof test); &amp;nbsp;// true&amp;nbsp; &amp;nbsp; console.log(typeof test==&quot;function&quot;); &amp;nbsp;// true&amp;nbsp; &amp;nbsp; console.log(typeof a==&quot;object&quot;); &amp;nbsp;// true&amp;nbsp; &amp;nbsp; console.log(typeof a==&quot;function&quot;); &amp;nbsp;// false
}
&amp;nbsp;
&amp;nbsp;
定義並同時呼叫
var val = (function(x) { return x * x; })(10);             </description>
		<pubDate>Wed, 07 Apr 2010 15:56:31 +0800</pubDate>
	</item>
	</channel>
	</rss>
