我有一个回文函数,只要我不触及函数参数" 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;
这导致了问题,我试图将该行本地放入上面的函数中,但它始终返回undefined。我知道如果我在函数之外声明这个变量,只会挂起var,而不是值。
这是函数附加到文档的结果的函数:
window.load = setTimeout(function(){
document.body.innerHTML += vm + " is a " + isPalindrome('tttyyttt') + " palindrome";
}, 1000);
我已经将setTimeout放在那里,看看是否会在一秒钟后分配vm值,但我得到的结果相同。
只要我不触及顶部函数参数并且不在任何地方引用它,这就顺利运行。
我试图将isPalindrome作为函数声明,尝试使用变量vm,甚至在isPalindrome函数中附加到文档部分,但没有任何作用。
我在这里缺少什么,我想要的只是这部分(fn参数)
document.body.innerHTML += vm + etc
添加到HTML。
这是链接:
答案 0 :(得分:1)
您的脚本中存在大量错误。
请先学习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';
});
<强> UPD:强>
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';
});
答案 1 :(得分:1)
重述你的问题:
如何从函数外部访问传递给函数的参数。
答案是:mu。
函数,或者说函数内部的代码,或者函数内部的所有变量,只在函数运行时才存在。函数内的任何var foo = ...
仅在函数执行时执行某些操作。函数结束后,所有这些变量都超出范围并被丢弃。这也适用于函数参数。
现在,由于您的代码不能同时在函数内部和函数外部,因此您无法通过定义访问函数&#34;来自外部&#34;而函数内部处于运动状态。当前线程在函数内部或函数外部运行代码,它不能同时执行。
所以最好你可以问一下如何在上次调用函数时获取的参数;即你用一些参数调用函数,一旦函数完成并返回给调用者,调用者想要检查它最后调用的参数。答案就是:不。该函数不会在任何地方记住或缓存其最后的参数。你可以编写这样做的代码,但这似乎是多余的,因为调用者已经知道它给函数的参数;它可能只需将它们放在其他地方:
let vm = 'tttyyttt';
document.body.innerHTML += vm + " is a " + isPalindrome(vm) + " palindrome";
答案 2 :(得分:0)
function isPalindrome(text){
if(typeof text != 'string'){
return false;
}
return {
text: text,
isPalindrome: text === text.split('').reverse().join(''),
};
}