javascript-返回时函数变得不确定
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-返回时函数变得不确定,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1775字,纯文字阅读大概需要3分钟。
内容图文
![javascript-返回时函数变得不确定](/upload/InfoBanner/zyjiaocheng/663/c06d2923fe8a423aa8d416df7e07596b.jpg)
我有:
>将字符串前缀映射到函数的字典(函数)
>函数(get()),该函数返回映射到字符串的函数
>一个函数(check()),该函数通过调用get()并将其转换为带!!的布尔值来检查是否有映射到字符串的函数.
当我用函数的键调用get()时,我希望check()返回true;但是,它返回false.我在get()中执行字典查找,并在两个函数中打印结果的类型.这是奇怪的部分.该类型仅在get()中是函数;在check()中,它是未定义的.显然,当我返回该函数时,该函数将被擦除.如何使check()准确?
这是我的简化代码:
var someObject = {
functions: {
"a": function () { return 0; },
"b": function () { return 1; }
},
get: ( function ( someVariable ) {
Object.keys( this.functions ).forEach( ( function ( functionKey ) {
if ( someVariable.startsWith( functionKey ) ) {
console.log( typeof this.functions[ functionKey ] );
return this.functions[ functionKey];
}
} ).bind( this ) );
} ),
check: function ( stringToCheck ) {
var returnedFunction = this.get( stringToCheck );
console.log( typeof returnedFunction );
return !!returnedFunction;
}
}
$( document ).ready( function () {
someObject.check( "a" );
} );
运行此代码将产生以下结果:
"function"
"undefined"
在控制台中.
解决方法:
这是因为forEach不会中断return语句的早期/短路(它将继续进行下一次迭代,然后get函数将返回undefined).您可以重新编写循环以允许中断(例如,使用简单的for循环),也可以在循环后返回值,例如:
var someObject = {
functions: {
"a": function () { return 0; },
"b": function () { return 1; }
},
get: ( function ( someVariable ) {
var func;
Object.keys( this.functions ).forEach( ( function ( functionKey ) {
if ( someVariable.startsWith( functionKey ) ) {
console.log( typeof this.functions[ functionKey ] );
func = this.functions[ functionKey];
}
} ).bind( this ) );
return func;
} ),
check: function ( stringToCheck ) {
var returnedFunction = this.get( stringToCheck );
console.log( typeof returnedFunction );
return !!returnedFunction;
}
}
内容总结
以上是互联网集市为您收集整理的javascript-返回时函数变得不确定全部内容,希望文章能够帮你解决javascript-返回时函数变得不确定所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。