javascript中把函数作为参数传递给另一个函数的问题

<html>
<body>
<script>
function call(first,second)
{
first(second);
}
var func=new Function("x","alert(x+10);") /*
这边的x是参数吗?如果不是参数,那如何确定在call(func,10)中传递给函数func的参数10就是给x的?
将这种形式的函数对象,改写成好理解的普通函数,不是函数对象(待改写对象本身就是函数对象)!
如果我要在函数对象中添加变量y,怎么添加?
*/
call(func,10);
</script>
</body>
</html>

x是形参。

var func=new Function("x","alert(x+10);")

相当于

var func = function (x) {
    alert(x + 10);
};

如果要添加变量y

var func = new Function('x', 'y', "alert(x + y + 10);");
/* 相当于
var func = function (x, y) {
    alert(x + y + 10);
};

然后call

function call(first, second, third) {
    first(second, third);
};
// call(func, 1, 2);
// x就是1,y就是2

追问

添加变量y的问题:变量是变量,形参是形参,不一样吧,怎么添加变量的方法和添加形参的方法竟然是一样!改写一段代码:
var x=15;
document.write(x);
将以上代码写成是函数对象的形式怎么写?

追答

首先明确一点

var x = 15;

这句话中x是变量。

然后下面这句

document.write(x);

x是实参。

然后,内置的方法

document.write = function (str) {...};

这其中str是形参。

你把实参和形参都叫为变量也没关系。


把document.write改写成函数对象

document.write = new Function("str", "...");

追问

根据你的方法改写:
var x=15;
document.write(x);
如下:
document.write=new Function("x","alert(x)"); // 将alert(x)改为document.write(x)没有用是为什么?
document.write(15);
是这样吗?
可我想要的是在函数对象中设置变量,本身拥有值,不需要再传递值给他了这种样子啊!不是形参,然后传递参数。

追答

要写也是

document.write("15");

再说,我也只是举个例子,不要随意修改内置方法。

我猜你要的是这种?

var func = new Function("x", "var y = 5; alert(x + y + 10);");

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-08-05
function call (first, second, third)
{
first (second, third);
}
var func = new Function("x","y","alert(x+y+10);")
call(func, 10, 20);追问

参数和变量是一样的吗?怎么添加变量的方法和添加参数是一样的?

追答

function call (first, second, third)
{
first (second, third);
};
var func = new Function("x","y","alert(x+y+10);");
func.call(null, 10, 20);

追问

以下纯属个人理解(替我判断对错,谢谢):
变量:本身可被赋值;
参数(形参,实参):本身不可被赋值,需传递值;
然后在帮我解释下,变量和参数之间有什么区别?
若是没区别,则以下代码为什么不能运行:
document.write=new Function("var x=15","alert(x);"); //变量改成参数可以运行,这不证明在函数对象中,变量是不允许出现的吗
document.write();

第2个回答  2015-08-05
社炒锅在挺像
相似回答