Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在页面加载函数中设置的onclick函数中干净地使用JS变量_Javascript_Jquery - Fatal编程技术网

Javascript 如何在页面加载函数中设置的onclick函数中干净地使用JS变量

Javascript 如何在页面加载函数中设置的onclick函数中干净地使用JS变量,javascript,jquery,Javascript,Jquery,我有一个功能,我已经在 window.addEventListener('load', function() { var variable_name_1 = localStorage.getItem('var_1'); ... } 我想移动功能,使其仅在用户单击按钮时运行,如下所示: function maketempuser() { ... } 我可以在需要时调用函数。但是该函数利用了加载函数中的大量变量。有没有一种干净的方法来“全球化”这些变量?或者我必须找到某种方法在h

我有一个功能,我已经在

window.addEventListener('load', function() {
    var variable_name_1 = localStorage.getItem('var_1');
    ...
}
我想移动功能,使其仅在用户单击按钮时运行,如下所示:

function maketempuser() {
...
}
我可以在需要时调用函数。但是该函数利用了加载函数中的大量变量。有没有一种干净的方法来“全球化”这些变量?或者我必须找到某种方法在html中添加所有这些变量:

<button ... onclick='maketempuser(variable_name_1, variable_name_2, ...);' >


注意:javascript将运行同一个文件,我只是不希望每次用户重新加载页面时它都会重新运行,因为会发生ajax mysql插入,因为该页面是允许用户注册的页面行中的一个。只需在全局范围内定义它们:

var variable_name_1;
window.addEventListener('load', function() {
  variable_name_1 = localStorage.getItem('var_1');
  ...
}
然而,这并不是一种特别健康的技术,因为它容易发生名称冲突。最好的做法是使用一个自定义对象(
cO
,或者使用您的首字母缩写,这是其他任何东西都不可能使用的),并将其用作所有自定义变量的占位符:

var cS = {
  var_1:null // or some default value...
};

window.addEventListener('load', function() {
  cS.var_1 = localStorage.getItem('var_1');
  ...
}

只需在全局范围内定义它们:

var variable_name_1;
window.addEventListener('load', function() {
  variable_name_1 = localStorage.getItem('var_1');
  ...
}
然而,这并不是一种特别健康的技术,因为它容易发生名称冲突。最好的做法是使用一个自定义对象(
cO
,或者使用您的首字母缩写,这是其他任何东西都不可能使用的),并将其用作所有自定义变量的占位符:

var cS = {
  var_1:null // or some default value...
};

window.addEventListener('load', function() {
  cS.var_1 = localStorage.getItem('var_1');
  ...
}

为了不让很多变量(这些变量可以被其他应用程序覆盖)污染全局范围,我建议您创建一个具有应用程序特定名称的对象,可能类似这样

var myAppVar = {};
window.addEventListener('load', function() {
  myAppVar.var_1 = localStorage.getItem('var_1');
  ...
}

为了不让很多变量(这些变量可以被其他应用程序覆盖)污染全局范围,我建议您创建一个具有应用程序特定名称的对象,可能类似这样

var myAppVar = {};
window.addEventListener('load', function() {
  myAppVar.var_1 = localStorage.getItem('var_1');
  ...
}

由于
localStorage
已经是全局存储,因此只需从那里检索处理程序中所需的值即可

function maketempuser() {
    var variable_name_1 = localStorage.getItem('var_1');
}

根本不需要向全局范围添加任何额外内容。

因为
localStorage
已经是全局的,只需从那里检索处理程序中需要的值即可

function maketempuser() {
    var variable_name_1 = localStorage.getItem('var_1');
}

根本不需要在全局范围中添加任何额外内容。

到目前为止,您尝试了什么?JSFIDLE或类似于您现有代码的代码将有助于回答此问题。请在加载处理程序中的值可用的位置创建单击处理程序。到目前为止,您尝试了什么?JSFIDLE或类似于您现有代码的代码将有助于回答此问题。请将click处理程序放在加载处理程序中的值可用的位置。谢谢,一旦运行了它,我将接受此答案,让我来解释为什么要在全局范围中定义它们?您可以从已经是全局的localStorage获取它们。为什么不在处理程序中需要它们时从那里获取它们呢?@gforce301我在示例中没有明确说明,但并不是我在页面加载中设置的所有变量都是从本地存储中检索的。@Rorschach因此每个人都应该阅读此文:在提问之前。谢谢,一旦我运行了它,我就会接受这个答案,让我来解释为什么要在全局范围内定义它们?您可以从已经是全局的localStorage获取它们。为什么不在处理程序中需要它们时从那里获取它们呢?@gforce301我在示例中没有明确说明,但并不是我在页面加载中设置的所有变量都是从本地存储中检索的。@罗夏因此每个人都应该阅读此文:在提问之前。