【发布时间】:2015-07-31 22:28:12
【问题描述】:
我有:
- 将字符串前缀映射到函数的字典 (
functions) - 返回映射到字符串的函数的函数 (
get()) - 一个函数 (
check()),它通过调用get()并使用!!将其转换为布尔值来检查是否存在映射到字符串的函数。
当我使用functions 中的键调用get() 时,我希望check() 返回true;但是,它返回false。我在get() 中执行字典查找并在两个函数中打印结果的类型。这是奇怪的部分。类型为function 仅在get();在check() 中,它是undefined。显然,当我返回它时,该功能会被删除或其他东西。如何使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"
在控制台中。
【问题讨论】:
标签: javascript function closures undefined