内部函数不知道外部作用域中定义的变量。为什么?

Inner function doesn't know variable defined in outer scope. Why?

我正在尝试浏览在线词典的页面。这是我的代码:

var Nightmare = require('nightmare');
var nightmare = Nightmare({ show: true });

var links = [];
function goToLink(linkName){
    nightmare
        .goto(linkName)
        .evaluate( () => {
            var href = document.querySelector("span.next a").href;
            links.push(href)
            return href;
        })
        .then((href) => {
            goToLink(href);
        })
        .catch((error) => {
            console.error('Error:', error);
        });
}

goToLink("http://lexicon.quranic-research.net/data/01_a/000_!.html");

我正在 Error: links is not defined。链接在 var links = []; 处明确定义,但内部函数不知道。这是怎么回事?

问题是 evaluate 回调是在不同的上下文中调用的,并且没有看到 links。你可以尝试做的是像这样传递它:

(...)
.evaluate( links => {
    var href = document.querySelector("span.next a").href;
    links.push(href)
    return href;
}, links)
(...)

links是回调的参数。您必须将其作为 evaluate 函数中的第二个参数传递。