如何在其他函数中使用fn作为函数参数
How can i use fn as function parameter in other function?
如何在其他函数中使用fn作为函数参数?此外,fn参数具有自参数。比如test("b('aa')")
,怎么办?
JAVASCRIPT
<script type="text/javascript">
function test(fn){
if(fn){
fn();
}
}
function a(){
alert(1);
}
function b(x){
alert(x);
}
/*
when click I get errors => TypeError: fn is not a function
*/
</script>
HTML
<button onclick="test('a')">test('a')</button>
<button onclick="test('b(hello)')">test('b(hello)')</button>
因为'a'IS是真的,但它不是函数。这应该有效:
<button onclick="test(a))">test('a')</button>
此外,你在测试中的条件不应该是if(fn){
,它应该是:
if(typeof fn === 'function'){
你可以用这种方式执行b:
<button onclick="test(b.bind(null, 'hello'))">test('b(hello)')</button>
这将把b
函数传递给test
,"hello"绑定作为其第一个参数
只需编写以下内容。
<script type="text/javascript">
function test(fn,parameter){
if(fn){
fn.apply(window,parameter||[]);
}
}
function a(){
alert(1);
}
function b(x){
alert(x);
}
/*
when click I get errors => TypeError: fn is not a function
*/
</script>
<button onclick="test(a)">test('a')</button>
<button onclick="test(b,['hello'])">test('b(hello)')</button>
感谢Felix Kling的评论。这是解释。
NOT正确,因为"b(hello)"是一个字符串对象。
test('b("hello")')
NOTcorrect,因为您得到的实际上是b('hello')的返回值,它是未定义的。
test(b('hello'))
要将参数发送到功能测试,必须将fn和参数分开。
您可以使用Function.protype.apply(thisValue,argumentsList)。
正如我所写的,
fn.apply(window,parameter||[])
fn函数的this值默认为window。
parameter
是参数列表,它位于<button>test('b(hello)')</button>
元素中的['hello']。||[]
防止未定义的变量。test(a)
是一个没有实现参数的示例。
使用jQuery,您可以在不需要更改函数的情况下代理参数:
<button onclick="test(a)" />
<button onclick="test($.proxy(b,window,'hello')" />
或者在功能范围内,你可以测试b的artiy
if (x.arity>0){
x(arguments[1])
}
并通过test(b,'hello');
点击
- angular.js:13424错误:[ng:areq]参数'fn'不是函数,getObject
- 通过fn.apply或fn.bind将函数传递给setTimeout
- 函数 (){ 返回 fn.apply(me, arguments); } 作为回调
- 将函数绑定到baz后调用fn.apply(bar,[])
- 如何在其他函数中使用fn作为函数参数
- angularjs[ng:areq]参数'fn'不是函数,在控制台中获取字符串时出错
- 在异步内部函数返回 [UI-路由器和 HTML 服务] 之后返回外部 fn
- Javascript:全局变量转到“窗口”或“全局”,但全局函数不会.全球 FN 去哪儿了
- 扩展 $.fn.init 函数
- 未捕获的类型错误:fn 不是图表.js中的函数
- 车把自定义帮助程序错误:“options.fn 不是函数”
- D3 强制布局 Tick Fn - nodes.attr() 不是一个函数
- 为什么<车身负载=“;fn()">使用函数调用,但是window.onload=fn;使用处理程序函
- $routeProvider配置路由抛出'未捕获错误:[ng:areq]参数'fn'不是函数,得
- 在AngularJS中定义初始应用程序-Argument'fn'不是函数,获取字符串
- 传递给setTimeout的函数fn不是作为函数调用的,而是作为类似window.fn()的方法调用的
- 未捕获的类型错误:对象函数(e,t){return new b.fn.init(e,t,r)}没有方法'feat
- 当我想调用update()函数时,jQuery.fn.yiiGridView抛出未定义错误
- $.fn. yiigridview.getSelection函数不能立即工作
- JQuery函数fn()没有定义