获取函数参数的未定义值

Getting undefined value for function argument

我有一个回文函数,只要我不触及函数参数 "array",它就可以正常工作。这是函数。

var getInput = function isPalindrome(text) {
    if (text === "undefined") return "this input is not a string, enter a word";
    if (text === "") return "incorrect one, you have to enter a word to test for";
    if (text === null) return false;
    if (text.length <= 1) return true;
    if (text.charAt(0) != text.charAt(text.length - 1)) return false;
    return isPalindrome(text.substr(1,text.length - 2));
}

这个工作正常并且是递归的。

现在在下一行我尝试缓存函数参数:

 var vm = getInput.text;

这引起了问题,我试图将该行本地放入上面的函数中,但它总是 return 未定义。我知道如果我在函数外声明这个变量,只会提升 var,而不是值。

这里是将函数结果附加到文档的函数:

window.load = setTimeout(function(){
    document.body.innerHTML += vm + " is a " + isPalindrome('tttyyttt') + " palindrome";
}, 1000);

我已经将 setTimeout 放在那里以查看是否会在一秒钟后分配 vm 值,但我得到了相同的结果。

只要我不触及顶级函数参数并且不在任何地方引用它,这运行顺利。

我尝试过将 isPalindrome 作为函数声明,尝试在 isPalindrome 函数中使用变量 vm 甚至附加到文档部分,但没有任何效果。

我在这里缺少什么,我只想要这部分(fn 参数)

document.body.innerHTML += vm + etc

要添加到 HTML。

这里是 link:

https://codepen.io/damianocel/pen/gxwmVE

您的脚本中有很多错误。

请先学习javascript。

这是适合您的工作代码:

var text = 'tttyyttt';

function isPalindrome(text) {
    if (typeof text !== 'string') {
        return false;
    }

    if (text.length === 0) {
        return true;
    }

    if (text.charAt(0) != text.charAt(text.length - 1)) {
        return false;
    }

    return isPalindrome(text.substr(1,text.length - 2));
}

document.addEventListener('DOMContentLoaded', function() {
    document.body.innerHTML += text + ' is ' + (isPalindrome(text) ? '' : 'not') + ' palindrome';
});

更新:

var getInput = {
    text: '',

    isPalindrome: function (text) {
        this.text = text;

        if (typeof this.text !== 'string') {
            return false;
        }

        return this.recursiveIsPalindrome(this.text);
    },

    recursiveIsPalindrome: function(text) {

        if (text.length === 0) {
            return true;
        }

        if (text.charAt(0) != text.charAt(text.length - 1)) {
            return false;
        }

        return this.recursiveIsPalindrome(text.substr(1,text.length - 2));
    }
}

function isPalindrome(text) {
    return getInput.isPalindrome(text);
}

document.addEventListener('DOMContentLoaded', function() {
    var result = isPalindrome('tttyyttt');
    document.body.innerHTML += getInput.text + ' is ' + (result  ? '' : 'not') + ' palindrome';
});
function isPalindrome(text){
    if(typeof text != 'string'){
        return false;
    }

    return {
        text: text,
        isPalindrome: text === text.split('').reverse().join(''),
    };
}

重述您的问题:

How can I access the argument passed to a function from outside the function.

答案是:mu

一个函数,或者更确切地说是函数内部的代码,或者更确切地说是函数内部的所有变量,只在函数处于 运行 时才存在。函数内的任何 var foo = ... 只会在函数执行时做一些事情。一旦函数结束,所有这些变量都会超出范围并被丢弃。这也适用于函数参数。

现在,由于您的代码不能同时在函数内部和函数外部,根据定义,您不能在函数内部运行时访问函数 "from outside"。当前线程要么是运行函数内的代码,要么是函数外的代码,不能同时执行。

所以你顶多问一下如何获取上次函数调用的参数;也就是说,你用一些参数调用函数,一旦函数完成并且 returns 给调用者,调用者想要检查最后调用它的参数。答案是:不。该函数不会在任何地方记住或缓存它的最后一个参数。您可以编写这样做的代码,但这似乎是多余的,因为调用者已经知道它提供给函数的参数;它可能只需要将它们放在其他地方:

let vm = 'tttyyttt';
document.body.innerHTML += vm + " is a " + isPalindrome(vm) + " palindrome";