Javascript函数评估
Javascript function evaluation
>我把函数声明为:
function test(id, name) {
return id + "*-----*" + name
}
所以当我这样做时test(2,"Bob")
我得到这个:
"2*-----*Bob"
但是当我声明数组时,例如:
a = [2, "Bob"]
并将这些参数注入到函数中,如下所示:
test(a.join(','))
我得到这个:
"2,Bob*-----*undefined"
这不是我想要的。为什么会这样解释?如何让它从我拥有的数组输出"2*-----*Bob"
test.apply(null,a)
会将数组a
发送到函数并使数组元素成为函数参数。 也就是说,a[0] 将是第一个函数参数,a[1] 将是第二个参数,依此类推,但您的函数只有两个参数。
有关此内容的更多信息,请阅读 The Mozilla Docs for Function.apply
a.join(',')
将连接数组,从而产生类似"2,Bob
"的字符串。您必须分别传递这两个变量,例如:
test(a[0], a[1]);
a.join(',')
给你一个字符串,所以你用一个字符串("2,Bob"
)调用你的函数test
,第二个参数是undefined
如果要允许数组作为参数,可以这样做:
function test(id, name) {
if (id.length > 1)
return id[0] + "*-----*" + id[1]
else
return id + "*-----*" + name
}
我认为你只将一个参数传递给需要两个参数的函数
尝试
test(a.join(','), "foo");
test(a.join(','))
这会将一个参数传递到函数中,即一个带有逗号的字符串。 对于 x
的任何值,test(x)
将始终只将一个参数传递到函数中。
希望它像你写test(2,"Bob")
一样工作,但Javascript不是在编写和递归评估自己!您期望:
-
a.join()
返回一个字符串并将其写入源代码。 - 读取并执行生成的源代码。
它的实际工作方式:
- 读取并执行源代码。
-
a.join()
返回一个值,该值用作test()
的输入。
要将数组中打包的参数传递给函数,您需要apply()
function test(id, name) {
return id + "*-----*" + name
}
var a = [2, "Bob"];
var result = test.apply(null, a); // See below
alert(result);
要apply
的第一个参数将在函数内变为"this",第二个参数是实际的值数组。
相关文章:
- 基本的Javascript/jQuery数学游戏:为什么可以't我第二次运行此函数时进行评估
- 使用评估函数调用 javascript 函数作为文本框 Asp.net 参数
- 评估作为参数传递给 Google 电子表格中自定义函数的条件
- JavaScript 函数同时评估自身和调用自身
- CasperJS评估函数第二次不工作
- 使用Rhino从已评估的JS中获取函数名及其参数
- TypeError: undefined 不是一个函数(评估 'document.getsElementsByC
- JavaScript 评估函数中的电源
- 从 onclick 调用函数,为什么我的参数被评估为 true
- 评估和函数作用域
- 评估函数的目的是什么
- 是 Nashorn 中的一个评估函数,可从不同的线程重用
- 节点.js REPL 有趣的行为与自定义评估函数
- 如何在用户脚本中创建与评估函数的钩子
- JSlint - 在 for 循环中使函数与评估函数
- 测试/验证/评估函数中每条路径的结果
- 如何在CasperJS'评估函数
- 关于模块的雄辩的JavaScript章节.关于范围和评估函数
- casperjs评估函数无法返回我需要的数据
- 正在评估函数参数内的java脚本表达式