首页 > 解决方案 > 如何使用Javascript检查函数是否存在于另一个函数中

问题描述

我正在尝试构建一个按需加载脚本的函数。那是我当前的代码:

function loadScript(src, name = null)
{
    var dfd = jQuery.Deferred();

    if (name === null) {
        name = src.split(/\\|\//); // split by folder separator 
        name = name[(name.length - 1)].split('.'); // catch last index & split by extension 
        name.splice(name.length - 1, 1) // Remove last
        name = name.join('.'); // add points in the middle of file name
    }

    if ( typeof name === 'function' ) return dfd.promise().resolve(name);

    $.getScript( src )
    .done(function( script, textStatus ) {
        dfd.resolve(name);
    })
    .fail(function( jqxhr, settings, exception ) {
        dfd.reject(exception);
    });

    return dfd.promise();
}

我的问题出在这部分代码上:

if ( typeof name === 'function' ) return dfd.promise().resolve(name);

其中 name 是一个变量,其中包含要检查的所需函数名称,但不是真正的函数名称,导致函数永远不会评估为“函数”。

我试过了:

typeof `${name}` // resulting a "string" 

eval("typeof name === 'function'") // But my node system not accept eval due to a potentially security risk

我有多少选择?

标签: javascriptjqueryfunctionvariable-variables

解决方案


又快又脏:

if ( typeof name === 'string' && typeof eval(name) === 'function' ) return dfd.promise().resolve(name);

因为您可能想在将其传递给 eval 之前仔细检查该名称实际上是 a。如果它来自用户输入,您可能还想进一步验证它,因为您可能会打开自己的脚本注入。


推荐阅读