我用api提取函数没什么问题。我在函数Popular()外部有变量currentPage,在这种情况下一切正常,但是当我试图在函数Popular()中声明该变量以获取增量时,我的数字仍然是1。有什么方法可以在不声明全局的情况下获取增量变量,但使用本地?按下按钮(nextPage())后,currentPage ++的数量应每次增加。
let currentPage = 1; <--- //global variable(I dont want)
popular();
function popular(page) {
fetch("https://api.themoviedb.org/3/movie/popular?api_key=xxxxxxxxxxxxxxxxxxx&page="+ page+"")
.then(resp => resp.json())
.then(resp => {
movieApi = resp;
movieResult = resp.results;
maxLenght = resp.total_pages;
document.getElementById("movie-section").innerHTML = `${movieResult.map(movieCard).join("")}`;
document.getElementById("btns-container").innerHTML = paginationCont();
shortText();
function paginationPage(){
console.log("maxLenght " +maxLenght);
const btnNext = document.getElementById("nextBtn");
const btnPrev = document.getElementById("prevBtn");
function prevPage() {
if (currentPage > 1) {
currentPage--;
popular(currentPage);
}
}
function nextPage() {
if (currentPage < maxLenght) {
currentPage++; <-- //it does not work when it declares inside
popular(currentPage);
}
}
btnNext.addEventListener("click", nextPage);
btnPrev.addEventListener("click", prevPage);
}
paginationPage();
});
}
答案 0 :(得分:1)
实际上,您可以不使用currentPage
的值,因为您已经拥有{em> 是本地的page
参数:
popular(1);
function popular(page) {
// ...etc ...
// ...
function prevPage() {
if (page > 1) popular(page-1);
}
function nextPage() {
if (page < maxLenght) popular(page+1);
}
// ...
}
注意:您可能想查看maxLenght
变量的拼写;-)
答案 1 :(得分:0)
问题在于,您需要访问持久性变量,以便跟踪popular
调用之间的当前页面。如果您不希望使用 global 变量,但是可以使用 outer 变量,则可以选择创建currentPage
变量,其范围仅限于{ {1}},并且在其他地方无法看到或更改:使用声明popular
并返回当前currentPage
函数的IIFE:
popular
尽管const popular = (() => {
let currentPage = 1;
return (page) => {
fetch( ...
// ...
// put the rest of the big function here
};
})();
// make sure to call `popular` for the first time *after* the IIFE:
// function declarations are hoisted, but IIFEs are not
popular();
在currentPage
函数中不是 local ,但它可以实现您所要的东西,而不会造成任何不必要的全球污染。