- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我有一个带有递归函数调用的 JavaScript snippet:
(function () {
"use strict";
var recurse = function (x) {
if (x <= 0) {
return;
}
return recurse(x - 1);
};
recurse(3);
}());
除了调用自己几次,它什么都不做,但它运行了。
将以上内容粘贴到 JSLint 中会出现此错误:
'recurse' is out of scope.
但是,如果我粘贴以下代码片段(使用函数声明而不是 var):
(function () {
"use strict";
function recurse(x) {
if (x <= 0) {
return;
}
return recurse(x - 1);
}
recurse(3);
}());
JSLint 喜欢它,没有错误。
我知道 JSLint 的目标是防止 JavaScript 代码中的错误。有谁知道为什么 JSLint 认为第一个是糟糕的 JavaScript?我通过不以第一种方式进行递归调用来防止什么错误?
编辑:对于此问题的任何 future 访问者:这些 JavaScript 片段都不会在最新版本的 JSLint 中引发任何错误。
最佳答案
两种风格都没有错。据我所知,这是一个不恰当的警告。
问题似乎是包含赋值的变量声明不会导致 JSLint 在整个赋值被评估之前在范围内注册声明变量名称的存在。也就是说,当 JSLint 读取 var recurse = ...
时,它不会意识到 recurse
是已声明的变量,直到它计算赋值的右侧。在这种情况下,右侧包含一个使用声明变量 recurse
的函数,但 JSLint 还不知道 recurse
的存在,因为它尚未完成对整个作业的解析。
请考虑此代码的工作方式与您的 var
示例完全相同,但在 JSLint 中产生无警告:
(function () {
"use strict";
var recurse;
recurse = function (x) {
if (x <= 0) {
return;
}
return recurse(x - 1);
};
recurse(3);
}());
通过将 var recurse
提取为单独的语句,JSLint 首先了解到 recurse
是在当前范围内声明的,然后然后解析任务。使用您的组合 var recurse = ...
(同样,这没有错),JSLint 错误地首先解析赋值,然后了解 recurse
的存在。
关于javascript - JSLint 声称某些递归函数调用是 "out of scope",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33787474/
我正在尝试解决为什么 Ruby 没有用空格分割我的字符串。例如: [1] pry(#)> msg => "!iex [email protected]|[email protected]> Firs
我正在尝试解决为什么 Ruby 没有用空格分割我的字符串。例如: [1] pry(#)> msg => "!iex [email protected]|[email protected]> Firs
这是我的 API 端点: [HttpPost] public int Post(SearchHistory searchHistory) { IDashboardRepository dash
我正在按照these guidelines验证来自Facebook API的signed_request参数。 ,但我在调用 Commons Codec 中的 Base64 类的某些方法时遇到了问题。
我有一个 json 结构数组: { data : [ { "num" : val , "time" : val } , ... ] } 我需要找到 num 的最大值和最短/最长时间,以及将对象移动到
我使用 Xcode 的 Refactor > Rename 命令尝试重命名 C 中的方法参数 this。 它声称 this 是“保留语言关键字”,但据我所知,事实并非如此。 这是 Xcode 中的错误
有人刚刚给我看了 A byte of Python 的旧 PDF 版本.根据本身,它是 3.0 版(本书的,而不是 Python 的),从 2014 年开始。在 Operators 部分, 有一个部分
问题: 您在 Intellij 中使用 VCS 系统并尝试提交内容。提交失败,Intellij 声称 index.lock 存在。你检查你的 repo 目录中的 .git/index.lock,发现它
我有以下 SAM 模板: AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Descriptio
这可能看起来微不足道,但我使用 Excel 来操作程序中的一些数据,然后以 tsv 格式输出数据。我想用 gnuplot 来绘制它,其复杂性不比 plot "filename" 复杂,但 gnuplo
我正在使用嵌入式 Jetty 启动标准 Java 网络应用程序。我的启动器是这样的: import org.eclipse.jetty.server.Server; import org.eclips
我正在阅读 Joshua Bloch 的 Effective Java,第 2 版,第 11 条:明智地覆盖克隆。 在第 56 页,他试图解释当我们重写某些类(如集合类)的 clone() 时,我们必
问题: 如 Fusion Location Provider API 所声称的,位置更新在室内不起作用。 发生了什么: 我尝试在我的 Android 应用程序中使用 LocationClient 实现
所以我只是尝试使用 NDK 构建一个库。我相信 Android.mk 和 Application.mk 文件是正确的,但它们是否正确无关紧要。 在NDK目录下执行make APP=hello时 And
我在 Android Studio 中尝试为我的模拟器安装 HAXM 时遇到了困难。我有一台 hp2000 笔记本;我将 Windows 8.1 更新到 Windows 8.1 Pro 以激活 Hyp
在我的程序中,我正在下载 misc。 PDF 文档,最后我想使用 Apache pdfbox (v1.8.8) 将它们合并到一个组合文档中。出于某种奇怪的原因,PDFMergerUtility 未能声
我正在尝试使用预先编写的接口(interface)编写队列类。接口(interface)包含方法 public void enqueue(T element); 我的类(class)看起来像 impo
有这样的东西: $(document).ready(function() { $("#myTable").dataTable({
我最近将一个 Android 应用程序从 Eclipse 移植到 Android Studio。我能够调试应用程序,甚至能够构建一个供客户端测试的发布版本。不幸的是,我不能再调试了。当我尝试从 And
每次,我在 Gerrit 中看到我的更改的 merged 状态并且我执行 git pull origin,我可以清楚地看到,我的更改/分支实际上没有已 merge 到 master 中。 请检查我的
我是一名优秀的程序员,十分优秀!