- 主题:js 閉包的環境有辦法直接訪問麽……
比如我寫
var foo = (function () {
var obj = { name : "OBJ" };
return function (key) {
return obj[key]; } }) ();
那麽執行 foo("name") 這樣就可以拿到 "OBJ"
但是,如果我想寫 foo("obj", "name") 這樣
那上面的函數就沒法寫了……除非我能直接拿到閉包的整個環境,比如:
var foo = (function () {
var obj = { name : "OBJ" };
return function(objname, key) {
return getClosureVar(objname)[key]; } }) ();
或者更進一步,我想遍歷閉包能訪問到的所有臨時變量
類似于 for (var objname in getClosureVars()) { ... }
這種有可能做得到麽?
p.s. 如果 js 做不到的話,有另外哪种語言可以麽?
--
修改:withinsea FROM 221.221.204.242
FROM 221.221.204.242
啥意思,就是對象還在,名字已經被扔了是麽……
【 在 edyfox (滇狐) 的大作中提到: 】
: 没戏。没被你引用的局部变量很可能已经被析构了。
--
FROM 221.221.163.26
……那麽激動干啥,我又沒說要在 function 外面訪問閉包……
【 在 modico (modico) 的大作中提到: 】
: 能直接访问的还叫闭包吗?开包算了!
--
修改:withinsea FROM 221.221.150.101
FROM 221.221.150.101
【 在 modico (modico) 的大作中提到: 】
: 不好意思,惹人怀疑我激动了,那就撤掉那个问好和感叹号吧,唉。
: //心·平·气·和 (对自己说)
: 若是在 function 里面的话,那跟闭包关系也不大了,你就想想怎么枚举函数
: 的局部变量吧,呵呵。
我問的就是這個啊……
引擎裏當然是有這個機制的(否則局部變量就沒法用了)
我只是想知道這個機制有沒有暴露出來供代碼使用
當然現在看來是沒有了……
: 不如试试 eval 吧,如果很想 foo("obj", "name") 的话
--
FROM 221.221.150.101