[問題] 請問可以動態宣告Function嗎?

看板Ajax作者 (好耶,好運還沒走!)時間7年前 (2017/01/13 19:04), 編輯推噓1(1017)
留言18則, 5人參與, 最新討論串1/1
例如: var elements = ["FunctionA","FunctionB","FunctionC"]; $.each(elements, function(i, e) { var elements[i] = new Function("a", "b", "return a * b"); }); $(function(){ var a = FunctionA(1,1); var b = FunctionB(1,1); var c = FunctionC(1,1); console.log(a); console.log(b); console.log(c); }); 請問這有可能做到嗎? 先謝謝大大回答。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.163.225.229 ※ 文章網址: https://www.ptt.cc/bbs/Ajax/M.1484305487.A.840.html

01/13 19:55, , 1F
search: eval
01/13 19:55, 1F

01/13 20:47, , 2F
不需要eval也能做到 就一般宣告配合scope即可
01/13 20:47, 2F

01/13 20:48, , 3F
真的沒辦法用with也比用eval好
01/13 20:48, 3F

01/13 20:48, , 4F
但我看不懂你到底想要做啥 所以沒辦法幫你改
01/13 20:48, 4F

01/13 21:32, , 5F
with不是拿掉了?
01/13 21:32, 5F

01/16 19:53, , 6F
還是可以用吧 只是跟eval一樣都是建議不要用
01/16 19:53, 6F

01/16 19:54, , 7F
事實上我也沒遇過非得用eval/with處理的問題 當沒有
01/16 19:54, 7F

01/16 19:54, , 8F
最好
01/16 19:54, 8F

02/01 11:56, , 9F
可以研究一下AngularJs怎麼做到DI,也許可以解決你的
02/01 11:56, 9F

02/01 11:56, , 10F
問題
02/01 11:56, 10F

02/04 23:18, , 11F
window.FunctionA = function (a, b) { return a*b; };
02/04 23:18, 11F

02/04 23:19, , 12F
所以:
02/04 23:19, 12F

02/04 23:19, , 13F
$.each(elements, function (i, e) {
02/04 23:19, 13F

02/04 23:20, , 14F
window[e] = function (a, b) {return a*b;};
02/04 23:20, 14F

02/04 23:20, , 15F
}
02/04 23:20, 15F

02/04 23:21, , 16F
因為你平常直接宣告function或變數的scope是在global下,
02/04 23:21, 16F

02/04 23:21, , 17F
nodejs下是global,瀏覽器下是window
02/04 23:21, 17F

02/04 23:22, , 18F
所以要達到一樣的效果就是把東西指派到global(window)下
02/04 23:22, 18F
文章代碼(AID): #1OUBHFX0 (Ajax)
文章代碼(AID): #1OUBHFX0 (Ajax)