【发布时间】:2016-08-16 14:02:26
【问题描述】:
我正在尝试使用 fingerprintjs2 javascript 库来获取浏览器指纹。
以下代码可以正常工作:
new Fingerprint2().get(function (result) {
var output = result;
document.write(output);
});
但是,我想在这个块之外设置一个变量,以便以后使用,例如:
var output;
new Fingerprint2().get(function (result) {
output = result;
});
document.write(output);
但在这种情况下,我得到了输出:
undefined
我猜这与作用域有关,那么有没有办法在外部作用域中设置变量,或者我需要将以下所有代码都放在这个函数调用中?
我已经阅读了有关获取嵌套函数值的其他问题,但在这种情况下似乎都没有。
【问题讨论】:
-
“与范围有关” - 不,这是因为您在执行
output = result;之前调用了document.write(output); -
它未定义,因为
document.write(output);在您的回调之前被调用 -
get 调用异步运行,因此
document.write(output)在$.get()调用仍在运行时被调用。 -
感谢您的信息 - 那么是否可以以允许设置全局变量的方式使用这样的库,或者我是否必须假设使用输出的所有后续代码都需要在这个块,如第一个例子所示?
-
JavaScript 是一种事件驱动的语言,您尝试设计代码的方式超出了范式。您需要重新考虑您的算法以符合事件驱动编程。一种高级的方式来看待它是一个函数调用链。任何使用输出的代码都应该在您的
$.get()调用中调用。代码可以封装在一个单独的函数中,但由于 AJAX 的异步特性,您需要遵循事件驱动范式,
标签: javascript scope nested fingerprintjs2