在下面的代码中,text
函数中无法访问变量findTextToDelete
(它会产生错误)
array = ['a', 'b', 'removeThis', 'c'];
removeText("removeThis");
function removeText(text) {
array.splice(array.findIndex(findTextToDelete),1);
}
function findTextToDelete(element) {
return element === text;
}
我可以通过创建全局变量'globalText'来解决此问题:
var globalText = "";
array = ['a', 'b', 'removeThis', 'c'];
removeText("removeThis");
function removeText(text) {
globalText = text;
array.splice(array.findIndex(findTextToDelete),1);
}
function findTextToDelete(element) {
return element === globalText;
}
console.log(array)
但是我试图理解为什么第一种方法不起作用。
似乎必须有更好的方法来做到这一点。有没有办法将“文本”传递给回调函数?
任何帮助将不胜感激。
答案 0 :(得分:3)
您可以在text
上使用closure来查找元素。
function removeText(text) {
array.splice(array.findIndex(findTextToDelete(text)), 1);
}
function findTextToDelete(text) {
return function (element) {
return element === text;
}
}
var array = ['a', 'b', 'removeThis', 'c'];
removeText("removeThis");
console.log(array)
答案 1 :(得分:1)
答案 2 :(得分:0)
在一个函数中定义的本地仅可用于第一个函数中定义的其他函数。函数中定义的局部变量的范围限于该函数。这通常称为https://stackoverflow.com/users/2030565/jasen。 (其他语言有不同的规则,但命令式语言中的词汇很常见。)
因此,您需要在removeText
内定义一个函数才能访问text
。
一种方法是仅使用函数文字而不是命名函数:
function removeText(text) {
globalText = text;
array.splice(array.findIndex(function (element) {
return element === globalText;
}, 1);
}
另一种方法是转发额外的值:
function removeText(text) {
globalText = text;
array.splice(array.findIndex(function (el) { returnfindTextToDelete(el, text); }, 1);
}
function findTextToDelete(element, text) {
return element === globalText;
}
(如果您不向后兼容,那么使用箭头功能可以使两者都更容易编写。)