我第一次使用本地存储,并遇到了一些范围问题。
当我尝试console.log(test)时,我在第二个if语句中获得了undefined。我做错了什么?
我的代码如下;
$("document").ready(function(){
var is_stopped = false;
source.onmessage = function(event) {
if (is_stopped) {
localStorage.setItem('offline', event.data);
var test = localStorage.getItem('offline');
console.log(test); // works here
}
if (!is_stopped) {
document.getElementById("result").innerHTML += "Data:" + event.data + "<br>";
console.log(test); // undefined
}
$("#start").click(function(){
is_stopped = false;
});
$("#stop").click(function(){
is_stopped = true;
});
});
<div id="result"></div>
<button id="stop"> stop</button>
<button id="start"> start</button>发布于 2017-08-14 15:24:32
这可能是因为is_stopped是假的,因此它不会输入第一个if,也不会检索值。注意,函数中声明的变量在函数结束时是垃圾收集的。
var test;//stays persistent
source.onmessage = function(event) {
if (is_stopped) {
localStorage.setItem('offline', event.data);
test = localStorage.getItem('offline');
console.log(test); // works here
}
if (!is_stopped) {
document.getElementById("result").innerHTML += "Data:" + event.data + "<br>";
console.log(test);
}
};提示:将单击事件侦听器移到其他侦听器之外使它们工作得更好.
发布于 2017-08-14 15:23:00
名为test的变量在is_stopped为false时未定义,因为它不是在is_stoppped条件之外声明的。
这样做是可行的:
var test = null; // declare outside conditional
if (is_stopped) {
test = localStorage.getItem('test');
}
if (!is_stopped) {
console.log(test); // returns null
}发布于 2017-08-14 15:26:08
运行应用程序时,var is_stopped将设置为false。
在这种情况下,if (!is_stopped) {..}将被执行。if (is_stopped) {..}将不会被执行。
由于托管,var test将被悬挂到函数的顶部&在那里它是未定义的。
只有在执行test时,才会为if (is_stopped) {..}分配一个值。
https://stackoverflow.com/questions/45677779
复制相似问题