JS 中的作用域:这些变量不应该是全局的,而是在没有 "var" 或 "let" 的情况下声明的。为什么?

Scope in JS: These variables shouldn't be global, but are declared without "var" or "let". Why?

这里是新手。我正在使用一些 JavaScript(在本例中为 JQuery),旨在在单击按钮时显示页面上的元素。

有些变量(例如“$lis”、"min"、"max")似乎没有用 "let" 或 "var" 声明。我的理解是,这会将它们设置为全局变量,但我认为在这种情况下没有任何理由将它们设置为全局变量。

谁能帮我理解为什么“$lis”、"min" 和 "max" 不包含 "var",但 "visible" 包含?谢谢!

$( document ).ready(function() {
    jQuery(function($) {
        $lis = $('.blog-page-post'); 
        min = 2;
        max = $lis.length;
        var visible = min;

        function showUpToIndex(index) {
            $lis.hide();
            $lis.slice(0, index).show();
        }

        function disableButtons(){
            if (visible >= max){
                visible = max;
                $('.button').hide();
            }
            else
            {
                $('.button').show();
            }
        }

        showUpToIndex(visible);
        disableButtons();

        $('.button').click(function(e) {
            e.preventDefault();
            visible = visible + 2;
            disableButtons();  
            showUpToIndex(visible);
        });
    });
    });

您必须使用 use strict (Strict Mode - MDN) 来处理这些边缘情况。

在你的例子中,当你像这样分配给未声明的变量时:

abc = true

然后变成这样:

window.abc = true