Re: [問題] 一個關於匿名函式與變數區域分類問題
※ 引述《Crow22312 (烏鴉)》之銘言:
: 有點難下標題的一個問題, 解釋起來可能會有點囉唆..
: 因為烏鴉在寫的小程式有許許多多的函式, 有些會跟另一支共用到,
: 但會需要有小部分修改. 在於量上面有一點點的規模, 所以希望函式們
: 能比較獨立的運作.
: 在每個函式傳入的參數上, 烏鴉習慣會讓他們檢查是否該有的都有,
: 已經讓他是在別人底下, 動態產生出來的函式了,
: 為什麼會抓不到上面一層的區域變數(參數)呢 0.0?
: 或者說是烏鴉想的太複雜了,
: 要做到檢查參數並丟log的類似功能有別的現成解決方法 ._.?
抱歉你原文的function scope 實在是太複雜,
外加你的 new Function (str,strFnBody) 我很少用有點暈頭轉向。
我是認為你的問題目前看起來應該是主要問題在於你的資料傳不進去,
而且我覺得這個函式每次都要再定義一次感覺就很浪費,
所以我直接放棄DEBUG 你原本的解法,請原諒我的懶惰。XD
(啊啊啊 不要急著 ← 我還沒講完啊啊啊 給我個機會~~~)
我先重新定義問題,現在有一個 function , 假設 param是 a,b,c
你希望檢查這個fn 有定義的 param 應該要非 undefined.
(在這裡我加上一條隱性規則,沒有定義任何 optional param 。)
(有定義的狀況就要自己key param name來規範了。)
就我的感覺是覺得應該可以透過 argumenets 來解決。
我的解法會是這樣
function checkFnParam(args){
var fnStr=args.callee.toString(); //取得function 定義字串
var fnNameCheck=fnStr.match(/^function\s([^\(]+)\(.+/);
//解析function name
fnName=(fnNameCheck==null) ? "anonymous" :fnNameCheck[1];
//如果functin name 是空白,就視為 anonymous function
var params=fnStr.substring(
fnStr.indexOf("(")+1,
fnStr.indexOf(")")).split(/[ ,]+/); //取得定義字串中的param
for(var i=0;i<params.length;++i){
if(typeof(args[i])=="undefined"){ //檢查輸入的參數是否為undefined
alert(fnName + ': typeof(' + params[i]+") == undefined");
return false;
}
}
return true;
}
//測試用函式1
function k( a,b,c){
checkFnParam(arguments);
}
k(); //k: typeof(a) == undefined
k("t1"); //k: typeof(b) == undefined
k("t1","t2"); //k: typeof(c) == undefined
k("t1","t2","t3"); //
k("t1","t2","t3","t4"); //
//測試用函式2
function anotherFunction(k1,k2){
checkFnParam(arguments);
}
anotherFunction(); //anotherFunction: typeof(k1) == undefined
anotherFunction("a"); //anotherFunction: typeof(k2) == undefined
anotherFunction("a","b");
//測試用函式3 (匿名函式)
var k2=function(a1,b1,c1){
checkFnParam(arguments);
}
k2(); //anonymous: typeof(a1) == undefined
測試用頁面。(firefox + ie6 測試無誤)
http://tonylovejava.googlepages.com/testCheckFnParam.html
--
難得看到讓我有興趣去細想跟寫demo的問題 XD
--
▄▅▆▇███▇▆▅▄▃ ╰┼╯─╮ ╮
◥███████████◣ ╰┼╯=│=│
◥██████───────◣ *. ╯ ╯ ╯ の 物 語 .*
◥███████──────◣ ~ ◢◣ ◢◣
◥██████───────◤ ◥◤* 空白的世界.翼 *◥◤
◥██▁▂▃▄▅▆▇███▆▅▄▃▂▂~telnet://tony1223.twbbs.org
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.133.218.161
※ 編輯: TonyQ 來自: 220.133.218.161 (01/16 21:49)
推
01/16 22:21, , 1F
01/16 22:21, 1F
推
01/16 22:27, , 2F
01/16 22:27, 2F
→
01/16 22:27, , 3F
01/16 22:27, 3F
→
01/16 22:39, , 4F
01/16 22:39, 4F
→
01/16 22:40, , 5F
01/16 22:40, 5F
→
01/16 22:40, , 6F
01/16 22:40, 6F
推
01/16 23:05, , 7F
01/16 23:05, 7F
→
01/16 23:06, , 8F
01/16 23:06, 8F
→
01/16 23:06, , 9F
01/16 23:06, 9F
→
01/17 21:53, , 10F
01/17 21:53, 10F
→
01/18 01:47, , 11F
01/18 01:47, 11F
→
01/18 01:47, , 12F
01/18 01:47, 12F
→
01/18 01:59, , 13F
01/18 01:59, 13F
→
01/18 01:59, , 14F
01/18 01:59, 14F
→
01/18 01:59, , 15F
01/18 01:59, 15F
→
01/18 02:00, , 16F
01/18 02:00, 16F
→
01/18 10:23, , 17F
01/18 10:23, 17F
→
01/18 10:24, , 18F
01/18 10:24, 18F
→
01/18 10:24, , 19F
01/18 10:24, 19F
→
01/18 10:25, , 20F
01/18 10:25, 20F
→
01/18 15:47, , 21F
01/18 15:47, 21F
→
01/18 20:10, , 22F
01/18 20:10, 22F
推
01/18 20:35, , 23F
01/18 20:35, 23F
→
01/18 22:57, , 24F
01/18 22:57, 24F
→
01/18 22:57, , 25F
01/18 22:57, 25F
→
01/18 22:59, , 26F
01/18 22:59, 26F
→
01/18 22:59, , 27F
01/18 22:59, 27F
→
01/18 23:00, , 28F
01/18 23:00, 28F
推
01/19 11:17, , 29F
01/19 11:17, 29F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
Ajax 近期熱門文章
PTT數位生活區 即時熱門文章