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
这里是新手。我正在使用一些 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