gpt4 book ai didi

声明全局变量的 Javascript 情况?

转载 作者:行者123 更新时间:2023-12-02 17:22:46 28 4
gpt4 key购买 nike

关闭。这个问题是opinion-based .它目前不接受答案。












想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它.

7年前关闭。




Improve this question




什么时候在 JavaScript 中声明一个全局变量?有关全局变量的典型建议包括:

我有时会遇到这样的情况,即变量的值在用户事件期间可用是至关重要的。例如,知道哪个页面处于打开状态。另一种情况是当有很多小功能的过程很长,但在整个过程中需要保持一些值(value)。与其将参数从一个函数传递到另一个函数,并希望它不会让人感到困惑,不如创建一个全局变量。

  • 一般来说,声明全局变量是不好的做法。
  • 可能会导致“命名空间污染”问题。
  • 在函数内部和外部重复的同名变量声明。
  • 查找全局变量比查找局部变量慢。
  • 很容易忘记您声明了全局变量,因为它与您正在处理的当前代码无关。
  • 跟踪和调试全局变量很困难。
  • 全局变量的异步使用可能会导致并发问题。

  • 在什么情况下声明一个全局变量会更好?
  • 一个包含很多字符的常量,它被大量使用。减少整体代码的大小。
  • 保存必须监视的事物的当前状态状态,并且始终可用于多个功能。

  • 在我看来,要求是:
  • 高使用率和/或
  • 至少有两个彼此超出范围的不同功能需要。

  • 例子:

    具有许多字符的对象:
    var dc = document;
    var isTheMenuDisplayed = dc.getElementById('MainMenu').style.display;

    监控当前状态:

    当前显示的是什么页面:
    /* The state of what page is currently display, must be available to
    the entire application at all times.
    Variable is declared outside of a function enclosure.
    */

    var whichPageDisplayed = '';

    function changePage(pageNameToOpen) {
    if (whichPageDisplayed === 'home') {
    close the home page;
    open the new page;
    //Make sure to record what the new current open page is
    whichPageDisplayed = pageNameToOpen;
    };

    我正在寻找有关何时使用全局变量的好处的原因。

    如果全局变量总是被认为是不好的,那么如果没有全局变量,我该如何处理上述两种情况呢?

    “全局变量的异步使用可能导致并发问题”的原因不应该是全局变量所独有的。任何东西的异步使用都可能导致并发问题,所以我看不出这是一个反对全局变量的论点。

    “很容易忘记您声明了全局变量,因为它与您正在处理的当前代码无关”的原因似乎是一个编码纪律问题。如果我看到没有 var = thisVar在该代码段中的任何地方都可以找到声明,我会想,“也许我将它声明为全局变量?”。然后我会搜索找到它。

    “跟踪和调试全局变量很难” 我的代码编辑器中有一个“搜索所有文件”选项。它搜索所有文件,并向我显示搜索找到匹配项的每一行代码。这并不难。根据我使用的浏览器和开发工具,错误消息可能会显示错误来自的确切代码行。

    最佳答案

    减少整体代码大小不是一个正当理由。缩小器会将其击倒。此外,如果您有类似 dc.getElementById('MainMenu').style.display 的示例,你想要一个 方法来帮助你。如getDisplayStyle('MainMenu') .这样做只是一种好的做法,因为它可以让您将逻辑保持在一个位置。

    保存状态也不是真正的正当理由。将代码保存在模块中。例如,您的代码变成了一些“更好”的东西:

    PageState = {
    changePage: function (pageNameToOpen) {
    if(this._currentPage == 'home') {
    /*******/
    }
    this._currentPage = pageNameToOpen;
    },
    getCurrentPage: function () {
    return this._currentPage;
    }
    };
    PageState.changePage(pageNameToOpen);

    您应该考虑全局变量的唯一情况是库是否需要它,或者您需要在“某物”存在之前在某物上设置配置选项(并且您没有使用 AMD 类型的模块)。例如,流行的 WYSIWYG 编辑器之一专门寻找一个全局变量,该变量定义了一些用于设置的常量。

    基本上,对于全局变量的几乎每一种可能的用法,都存在将其包装在某种模块中的反论点。

    关于声明全局变量的 Javascript 情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23770559/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com