所以我有這樣的代碼:是否可以在新函數()後更改函數的作用域?
function fn(a){
var f=(new Function("return a"));
return f();
}
fn(7)//ReferenceError: a is not defined
同樣的問題與局部變量:
function fn(){
var a=7;
var f=new Function("return a");
return f();
}
fn(7)//ReferenceError: a is not defined
我希望它返回一個,但新的功能不能看到, 它只能看到全球一個
var a=1;
function fn(a){
var f=(new Function("return a"));
return f();
}
fn(7)//1
正常的初始化函數可以看到參數。
function fn(a){
var f=function(){return a};
return f();
}
fn(7)//7
我需要調用我的項目中的基本構造函數,並且不能使用全局變量。 我知道,我可以給參數傳遞給新創建的功能,可以解決這一點,與這樣稱呼它:
function fn(a){
var f=(new Function('a',"return a"));
return f(a);
}
fn(7)//7
而且還可以使用一些分析功能,有些愣神長法建立傳入的參數到達這樣的:
function parsargs(funct){
//some parsing methodes giving back argument name list from funct.toString()
return "['a','b']";//like this
}
function fn(a,b){
var arrgstr,retfunc;
arrgstr="";
for(var i in arguments)
{
if(i<arguments.length-1)
arrgstr+=arguments[i]+",";
else
arrgstr+=arguments[i];
}
//return arrgstr;
retfunc="var f=new Function("+parsargs()+",'return b*a');return f("+arrgstr+")";
return (new Function(retfunc))();
}
fn(7,4)//28
但一定要到達局部變量和函數以及更簡單的方法... 有什麼建議?
PS: 我試圖在項目
我更換的eval()是我原來問題的一個簡化版本: fiddle
答案是NO ...
你想讓它與ES6和嚴格模式(即不使用arguments.callee)兼容嗎?你想能夠自由地命名fn的參數嗎? –
我有強烈的感覺,這是一個XY問題。什麼是真正的目標? –
arguments.callee不是我的選擇... – szinter