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 || {};