jsHint“功能没有定义”的问题,为了函数声明事项?

通过jsHint传递这样的代码:

var A = function (spec) { "use strict"; var a = function () { return b(); }; var b = function () { return 5; }; a(); };

返回此错误:

Line 4: return b(); 'b' is not defined.

我理解这可能与“提升”为解释在这里做:JavaScript函数命令:它为什么重要?

然而,下面的代码返回相同的错误:

var A = function (spec) { "use strict"; function a () { return b(); } function b () { return 5; } a(); };

如果我理解正确,至少第二代码段应不返回错误。 难道我错了?

即使考虑起升机构,我还是不明白,为什么第一个代码片断应该是错误的。 功能a功能之后,才会调用b的定义,所以b将是a的关闭。 是我的代码错误或jsHint错了吗?

据我所知,这个问题是纯学术性的,因为代码将按预期在所有的浏览器。 不过,我想知道为什么jsHint抛出一个错误。

--------------解决方案-------------

这是在JSLint的假阳性。
无论你的代码片段的正常工作。

忽略警告。

因为()引用B检查的声明()之前,第一个例子是一个提升的问题。 的解决方案是让“变种的a,b;' 之后你的“使用严格的”; 声明。

jsHint正试图通过指出潜在的问题和非传统的代码来帮助你。

在这种情况下,它并不高兴,因为这可能是困难的人的理解 - 即使它是完全有效的JavaScript。

分类:JavaScript的 时间:2012-01-01 人气:1
分享到:

相关文章

  • 我应该使用的JSLint或JSHint JavaScript验证? 2014-09-03

    我目前正在验证我对JSLint的JavaScript和制作方面的进展,它帮助我写出更好的JavaScript - 特别是与jQuery库工作. 现在我所遇到JSHint,JSLint的的一个分支. 所以我想知道对于Web应用程序,这是非常多的JavaScript驱动的,这是好还是最适用的验证工具,对着干: JSLint的或JSHint? 我现在要决定一个验证机制和前进,将此方法用于客户端验证. 和jshint和JSLint的区别? 请一个JavaScript例子来说吧. 链接: jshint -

  • 什么是“使用严格的”做在JavaScript中,什么是它背后的原因? 2012-01-15

    最近,我跑我的一些JavaScript代码通过Crockford的JSLint的,它给了以下错误: 问题1行字符1:缺少"使用严格"语句. 做一些搜索,我意识到有些人添加"use strict";到他们的JavaScript代码. 有一次,我加的说法,错误停止出现. 不幸的是,谷歌并没有透露太多这背后字符串声明的历史. 当然,它必须有事情做有多大的JavaScript是由浏览器解释,但我不知道效果会怎样. 那么,什么是"use strict";一

  • 我在哪里有声明变量在JavaScript中做一个循环什么时候? 2012-10-04

    我看到在JavaScript制作一个"循环"的时候宣布两个变量型动物的方法: 第一种方式: for (var i = 0, l = [].length; i < l; i += 1) { // make something } 方式二: var i; var l; for (i = 0, l = [].length; i < l; i += 1) { // make something } 有一些理由,更喜欢其中的一个? --------------解决方案--------

  • 不要紧,这等于运算符(== VS ===)我在JavaScript中的比较使用? 2014-09-29

    我使用JSLint的经历JavaScript和它的返回了许多建议,以取代==用(双等号===三级等号)做这样的事情比较时idSele_UNVEHtype.value.length == 0内部的if声明. 有没有性能优势来取代==与=== 许多运营商相比存在任何性能的提升将受到欢迎. 如果没有类型转换发生,会有超过一个性能提升== --------------解决方案------------- 身份===运算符相同的行为与平等==运算符,除了没有类型转换完成后,和类型必须相同被视为相等. 参考:

  • 有没有一种方法来测试在JavaScript中循环引用? 2012-02-18

    我在做一个游戏,我已经遇到一个问题...当我尝试保存,JSON失败,并报告说,循环引用正在某处进行. 我不认为它实际上是,我还看不出来,所以有一个算法或任何其能告诉我它到底是(这之间的物体和东西)? 此外,有没有一个JSON的替代方案,可以节约循环引用? 我运行的node.js服务器上,我看到了这一点,但我不能得到它的工作(它不是做成一个模块,我可以要求()在我的代码). --------------解决方案------------- 如果你想序列化循环引用,所以你可以将它保存,你需要参考"虚拟

  • 在JavaScript中最好的方式来检查IE不到9无库 2012-05-11

    什么是你最快的速度,最短的(最好)的方法来检测浏览器是IE浏览器和版本小于9的JavaScript,没有使用jQuery或任何附加库? --------------解决方案------------- JavaScript的 var ie = (function(){ var undef, v = 3, div = document.createElement('div'), all = div.getElementsByTagName('i'); while ( div.innerHTML =

  • 声明JavaScript中的多个变量 2012-08-18

    在JavaScript中,可以声明多个变量,像这样: var variable1 = "Hello World!"; var variable2 = "Testing..."; var variable3 = 42; ...或者是这样的: var variable1 = "Hello World!", variable2 = "Testing...", variable3 = 42; 有个方法更好/比其他的快? 谢谢, 史蒂夫

  • 在Javascript中,'之间的新MyFunction的差()`和`新MyFunction` 2013-01-09

    在一些JavaScript代码片段(如http://mckoss.com/jscript/object.htm)我看到的物体以这种方式被创造: var obj = new Foo; 然而,至少在MDC,似乎括号不是创建一个对象时,可选: var obj = new Foo(); 是创建对象的有效和ECMA标准定义的前路? 是否有创建对象和后来的前路有何区别? 是优于其他? 提前致谢. --------------解决方案------------- 引用大卫·弗拉纳根1: 作为一个特殊的情况下,对

  • 自JavaScript中执行功能的目的是什么? 2013-02-05

    在JavaScript中,如果你想使用这个: (function(){ //Bunch of code... })(); 在这个: //Bunch of code... --------------解决方案------------- 它的所有关于变量范围. 在自执行的函数定义的变量,在默认情况下,只提供给代码自执行的函数中. 这使得要被写入代码,而如何变量命名为中的JavaScript代码其他块的关注. 自我调用(也称为自动调用)是当一个函数在它的定义立即执行. 这是一个芯图形,并作为对Java

  • 有没有更好的办法在Javascript中做的可选功能参数? 2013-03-21

    我一直处理可选参数在Javascript中是这样的: function myFunc(requiredArg, optionalArg){ optionalArg = optionalArg || 'defaultValue'; //do stuff } 有没有更好的办法做到这一点? 有没有在那里使用任何情况下||一样,是要失败? --------------解决方案------------- 如果optionalArg传递你的逻辑会失败,但计算结果为假 - 试试这个作为替代 if (typeo

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.439 (s). 10 q(s)