获取函数参数的未定义值
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:
您的脚本中有很多错误。
请先学习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";
我有一个回文函数,只要我不触及函数参数 "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:
您的脚本中有很多错误。
请先学习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";