Javascript JSLint:用于三元变量集的范围之外

Javascript JSLint:用于三元变量集的范围之外,javascript,ternary-operator,jslint,Javascript,Ternary Operator,Jslint,我有这样一个代码块: /*global MYAPP: true*/ var MYAPP = MYAPP || {}; JSLint在与消息“MYAPP超出范围使用”等号后突出显示“MYAPP” 这有什么问题吗?如果使用var,那么就是在声明一个局部变量。 如果执行MYAPP | |{},则通常会尝试为全局变量或先前声明的变量设置默认值 MYAPP的范围应该是什么?如果是全球性的,那么 MYAPP = window.MYAPP || {}; 窗口。阻止它抱怨它未定义 如果它不是全局的,但在前

我有这样一个代码块:

/*global MYAPP: true*/
var MYAPP = MYAPP || {};
JSLint在与消息“MYAPP超出范围使用”等号后突出显示“MYAPP”


这有什么问题吗?

如果使用
var
,那么就是在声明一个局部变量。 如果执行
MYAPP | |{}
,则通常会尝试为全局变量或先前声明的变量设置默认值

MYAPP
的范围应该是什么?如果是全球性的,那么

MYAPP = window.MYAPP || {}; 
窗口。
阻止它抱怨它未定义

如果它不是全局的,但在前面声明,则

MYAPP = MYAPP || {};
如果它是该行所属函数的新局部变量,则

var MYAPP = {};
如果在脚本的顶层定义了一个变量(即不在函数中),那么它是一个全局变量。如果在两个不同的脚本标记(或javascript文件)中有同名的全局变量,则它们是相同的变量。 如果您想将变量隐藏在其他脚本标记(或JavaScript文件)中,请考虑使用IFIE(立即调用的函数表达式)。e、 g


对于jshint、jslint、sonarqube等,如果没有使用
var
let
const
)显式声明,则无法使用任何变量

如果您想将它们设置为全局,您必须在第一时间定义当前全局关键字,因为它在浏览器中是
窗口
,但在其他上下文中,可能不是这样

因此,请参见下面如何避免您的警告(JSDoc注释不是解决方案的一部分,但解释了为什么有用)

因此,在您的示例中,简单的方法是:

var window = this,
    MYAPP = window.MYAPP || {};


var MYAPP=window.MYAPP | |{}
,否则表达式总是将
MYAPP
保留为
{}
,因为“MYAPP”将由于变量提升而
未定义。实际上它可以工作,但JSLint除外。但是我们将在node.js中使用什么呢?没有
窗口
。我找到了另一种方法:
var MYAPP;MYAPP=MYAPP |{}嗯。我想你需要一个不同名称的临时变量,我以前没有意识到……谢谢你的回答!但是你怎么看待
var MYAPP;MYAPP=MYAPP |{}?不需要使用
MYAPP | |
部分,因为如果使用var MYAPP,这将声明一个名为
MYAPP
的新变量。如果您还有一个名为
MYAPP
的变量,那么这是一个不同的变量,因为您使用了
var
var-MYAPP之间的最终结果没有差异;MYAPP=MYAPP |{}
var MYAPP={}是的,我和你一样认为。:)但是试着测试:
var MY=MY |{aa:'aa'};var MY;MY=MY |{aa:'bb'};console.log(MY.aa)那里发生的事情是,它们都在同一个范围内,因此只有一个变量。顶级变量(即不在函数内)是javascript中的全局变量,并且可能相互冲突。因此,即使它们在单独的脚本标记中,它们仍然是相同的全局变量。如果你想让它们只对包含它们的脚本标签可见,那么考虑使用IIFE,例如<代码>(函数){var i=My{{AA:AA}};/*其他代码*/}();代码>
/**
 * @fileOverview Starting point for Front-end [Your Project Name]'s JavaScript.
 * @author {@link http://www.lesieur.name/|Bruno Lesieur}
 * @version 1.0.0
 * @module Common
 * @requires {@link external:jQuery}
 */

var window = this,

    /**
     * Container for all function of website.
     * @namespace website
     * @global
     * @type {Object}
     */
    website = window.website || {},

    /**
     * Write less, Do more.
     * @external jQuery
     * @global
     * @see {@link https://jquery.com/|jQuery}
     */
    $ = window.$,

    /**
     * Shortcut for $(window).
     * @global
     * @type {jQuery}
     */
    $window = window.$window || $(window);

/**
 * All components (modules) avaiable on all pages.
 * @namespace components
 * @alias components
 * @type {Object}
 * @memberOf website.
 */
website.components = website.components || {};
var window = this,
    MYAPP = window.MYAPP || {};
var global = this,
    MYAPP = global.MYAPP || {};
var MYAPP = this.MYAPP || {};