我尝试了一个我很困惑的场景。这可能是javascript 101,但我在这里错过了一点。
假设你有JS库,它定义了一个全局变量。它还有两个叫做setData和retunData的函数。我有一个单独的html,里面有一个脚本&head;头标记。此HTML文件导入库上方。
现在在html上我有一个带有两个按钮的文本字段。按钮是发送数据和查看数据。流程是,用户输入内容并单击发送数据按钮。在onClick上我获取文本值并将其传递给JS库setData函数,该函数将数据设置为全局变量。当我点击查看数据时,在它上面点击它将调用JS库的returnData函数,并且我将警告该值。
我的问题是,如果我在两个浏览器上运行我的html,并且从一个浏览器运行,如果我设置值" ONE" ,当我检索它时在同一个浏览器上说" ONE"。在第二个浏览器上,如果返回值,它应该是" ONE"因为该变量是全局的,并且值已由第一个浏览器设置。
但它可以作为两个请求。它不会覆盖全局变量值。我知道它应该是理想的情况。但为什么?那是一个全局变量吗?我希望我的问题很明确。
在jsLibrary上我有这个。
var checkVal;
function setData(val){
checkVal = val;
}
function viewData(){
return checkVal;
}
我的HTML就是这个。
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<script src="js/jsLibrary.js"></script>
<script src="js/jquery-2.1.1.min.js"></script>
<title></title>
<script type="application/javascript">
function sendData(){
var val = $("#idTextVal").val();
setData(val);
}
function viewData(){
alert(returnData());
}
</script>
</head>
<body>
<input type="text" id="idTextVal">
<input type="button" id="idConnect" onclick="sendData()" value="SEND">
<input type="button" id="idChecj" onclick="viewData()" value="VIEW">
</body>
</html>
答案 0 :(得分:2)
为什么?那是一个全局变量吗?
它是全局的,但是对于这个特定的选项卡/页面实例。如果您在其他选项卡中打开相同的页面,javascript引擎将初始化所有变量,因为它不知道您有其他选项卡。
在您的情况下,您有多种选择。也许,最直接的是使用服务器端存储来保存状态。或者您可以使用简单的cookie / localStorage方法,它们也由同一来源的所有页面共享。我会更简单地使用WebStorage:
function setData(val) {
localStorage.checkVal = val;
}
function viewData() {
return localStorage.checkVal;
}