Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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)_Javascript_Variables - Fatal编程技术网

在函数执行之间保留变量(Javascript)

在函数执行之间保留变量(Javascript),javascript,variables,Javascript,Variables,我有一个JavaScript函数,每次单击其中一个链接时都会运行。这些函数首先检查所单击链接的id,然后运行if语句。根据链接的id,定义了不同的变量 所有这些都是可行的,但问题是一些链接定义了一个变量,而其他链接定义了另一个变量,我需要保留以前函数执行中定义的变量,以便为函数的其他执行进行定义 例如: $(document).ready(function() { $(".sidebar a").click(function(event) { event.preventDefault

我有一个JavaScript函数,每次单击其中一个链接时都会运行。这些函数首先检查所单击链接的id,然后运行if语句。根据链接的id,定义了不同的变量

所有这些都是可行的,但问题是一些链接定义了一个变量,而其他链接定义了另一个变量,我需要保留以前函数执行中定义的变量,以便为函数的其他执行进行定义

例如:

$(document).ready(function()
{
  $(".sidebar a").click(function(event) {
    event.preventDefault()
    var targetID = $(this).attr("data-target")
    $("#" + targetID).attr("src", $(this).attr("href"))
    var element = $(this).attr("class")
    if (element == "submit") {
      var submit = $(this).attr("user")
      alert("1")
    } else if (element == "view") {
      var view = $(this).attr("user")
      alert("2")
    }
  })
  window.history.replaceState({}, 'logs', '/file/path?submit=' + submit + '&' + 'view=' + view)
})

谢谢

在外部范围内定义变量:

$(document).ready(function () {
    var submit;
    var view;

    $(".sidebar a").click(function (event) {
        event.preventDefault();
        var targetID = $(this).attr("data-target");
        $("#" + targetID).attr("src", $(this).attr("href"));
        var element = $(this).attr("class")
        if (element == 'submit') {
            submit = $(this).attr("user")
            alert("1")
        } else if (element == 'view') {
            view = $(this).attr("user")
            alert("2")
        }
    });
});

在外部范围中定义变量:

$(document).ready(function () {
    var submit;
    var view;

    $(".sidebar a").click(function (event) {
        event.preventDefault();
        var targetID = $(this).attr("data-target");
        $("#" + targetID).attr("src", $(this).attr("href"));
        var element = $(this).attr("class")
        if (element == 'submit') {
            submit = $(this).attr("user")
            alert("1")
        } else if (element == 'view') {
            view = $(this).attr("user")
            alert("2")
        }
    });
});

在函数外部创建var submit和view,使其具有全局作用域。

在函数外部创建var submit和view,使其具有全局作用域。

您可以使用JQuery的
.data()
函数在匹配的元素上存储任意数据

例如:

$(this).data("submit", $(this).attr("user")); // set a value

var submit = $(this).data("submit"); // retrieve a value

这将把数据放在JQuery对元素的知识的上下文中,因此它可以在函数调用之间甚至在不同事件之间共享。

您可以使用JQuery的
.data()
函数在匹配的元素上存储任意数据

例如:

$(this).data("submit", $(this).attr("user")); // set a value

var submit = $(this).data("submit"); // retrieve a value

这将把数据放在JQuery对元素的知识的上下文中,因此它可以在函数调用之间甚至在不同事件之间共享。

您可以使用外部函数,它只声明一些变量并返回内部函数。内部函数可以从外部作用域访问变量,外部作用域对函数的每次调用都保持不变

例子 现场演示

您可以使用一个外部函数,它只声明一些变量并返回一个内部函数。内部函数可以从外部作用域访问变量,外部作用域对函数的每次调用都保持不变

例子 现场演示

你缺少了一堆分号……我确信我的代码很潦草,但我知道我目前的工作原理,我所需要的只是让变量从函数的内部到外部。我不是说它不应该只是看起来混乱,或者使用分号,但这样的混合很混乱,双引号和单引号也一样。尝试用草率的代码解决问题总是一个坏主意,因为当需要重构时,它已经是一个巨大的烂摊子了。你缺少了一堆分号……我确信我的代码是草率的,但我知道我目前的工作原理,我所需要的只是让变量从函数的内部到外部,我不是说它不应该只是看起来混乱,或者使用分号,或者不使用分号,但是像那样混合是混乱的,双引号和单引号也是如此。试图用草率的代码解决问题总是一个坏主意,因为到了重构的时候,它已经是一个大烂摊子了。应该尽量减少使用全局变量。哈哈!我的观点是,为了保持这些变量可用,它们需要在方法范围之外…在点击处理程序范围之外,是的。但是当然不需要使它们成为全局的,因为可以在ready处理程序的作用域中声明它们,甚至可以引入一个额外的作用域。应该尽量减少使用全局变量。哈哈!我的观点是,为了保持这些变量可用,它们需要在方法范围之外…在点击处理程序范围之外,是的。但是当然不需要使它们成为全局的,因为可以在ready handler的范围内声明它们,甚至可以引入一个额外的范围。我已经尝试过了,这听起来是个好主意,但不幸的是,它做的事情和以前一样。@zggz12它做的事情是什么?它做的事情与定义函数中的变量完全相同。它总是将函数运行中未定义的变量设置为undefined@zggz12您必须从分配中删除
var
,然后单击处理程序中的
submit
view
。是你干的吗?(参见上面的代码)我已经尝试过了,这听起来是个好主意,但不幸的是它做的事情和以前一样。@ZGZ12它做什么?它做的事情与定义函数中的变量完全相同。它总是将函数运行中未定义的变量设置为undefined@zggz12您必须从分配中删除
var
,然后单击处理程序中的
submit
view
。是你干的吗?(参见上面的代码)我需要做些什么来初始化它吗?…我尝试将“$(this).data”(“submit“,$(this).attr”(“user”))放在if语句中,并将“var submit=$(this).data”(“submit”)放在处理变量的部分之前,它不起作用。我需要做些什么来初始化它吗?…我试图将“$(this.data”(“submit”),$(this.attr”(“user”))放在if语句中,并在处理变量的部分之前放置“var submit=$(this.data”(“submit”)”,但它不起作用。