Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jshint理解Angular吗?_Javascript_Angularjs_Jshint - Fatal编程技术网

Javascript jshint理解Angular吗?

Javascript jshint理解Angular吗?,javascript,angularjs,jshint,Javascript,Angularjs,Jshint,jshint在按照angular style Guide(by或)的建议定义角度模块(或指令或工厂)时抛出错误。例如,对于这样的控制器: (function () { 'use strict'; angular .module('myApp') .controller('myAppCtrl', theController); function theController() {...} })(); 。。。jshint抛出此错误: '

jshint在按照angular style Guide(by或)的建议定义角度模块(或指令或工厂)时抛出错误。例如,对于这样的控制器:

(function () {
    'use strict';

    angular
        .module('myApp')
        .controller('myAppCtrl', theController);

    function theController() {...}

})();
。。。jshint抛出此错误:

'theController' was used before it was defined.
尽管存在这些错误,angular应用程序仍能完美工作。但是我不知道为什么

我错过了什么?我想知道jshint是否是angular代码质量的良好评估工具(尽管它作为GeneratorAngular包含在流行的包中),还是我做错了什么(尽管我的应用程序可以工作)


提前谢谢

首先,在“全局变量”中包含角度,例如:

"globals": { // Global variables.
        "jasmine": true,
        "angular": true,
        "browser": true,
        "element": true,
        "by":true,
        "io":true,
        "_":false,
        "$":false
    }
然后在从角度引用函数定义之前移动它

(function () {
    'use strict';

    function theController() {...}

    angular
        .module('myApp')
        .controller('myAppCtrl', theController);
})();
您的代码应该可以工作,但是jshint将尝试让您以非常严格的方式编写代码。至少,在使用函数之前定义它们是一种“良好实践”。正如我在上面的评论中提到的,我认为较旧的javascript引擎是自上而下执行的(虽然不能肯定,也不能测试)——因此,如果您想要获得尽可能广泛的支持,您将需要听取jshint

这里值得注意的是,如果您使用
var
关键字来定义函数,您将得到一个错误-最好通过示例来解释:

这是有效的()

。。。但这不是()


使用
latedef
属性并将其设置为
false
。这允许提升功能,IMO认为这很好。但是仍然报告了变量的提升,这在IMO中是不好的

,因此另一个让每个linter都高兴的选项是,首先声明将保存函数的变量,将其用作参数,然后定义它

但就我个人而言,我不确定我是否喜欢这里的流动。我想我更喜欢杰克的答案,但如果你不喜欢他的话,这更接近爸爸喜欢的答案。事实上,如果他真的希望函数在使用后出现(他确实这样做了),我不知道为什么这不是他的建议。否则,在JSHint或JSLint中将
latedef
设置为true时,就不能使用他的样式


将控制器的功能定义移动到角度代码上方。现代的JS引擎在执行之前会向前看,并找到您的函数定义,但较旧的引擎是从上到下执行的(我认为“严格”模式也需要这样做)。我认为函数提升将使这不再是一个问题jshint理解JavaScript*吗。AngularJS是JAVASCRIPT。没有别的了,误差不是特定于角度的。显然,您已经启用了,这会警告您依赖的代码。禁用该选项或调整代码中语句的顺序以删除依赖项。@self在本例中,
Angular[style]!==JavaScript
。John Papa(参见)有一个明显的缺点,即在函数用作参数后需要定义函数。这意味着Papa认可的角度样式在JSHint中将
latedef
设置为true时不起作用,并且永远不会通过JSLint。我可能会改变一下措辞(“约翰·帕帕·格罗克·杰斯林特吗?”),但大卫的问题是公平的。这不是一个很好的标题,但是一个公平的问题。问题解决了!!谢谢你的回答@杰克裂土器,它的工作只是移动定义的功能,正如你所建议的。无论如何,我还按照您的建议在.jshintrc文件中的globals中添加了“angular”。再次感谢!问题是angular style guide提倡一种定义下面的函数的样式,然后将它们绑定到一个公共端点(即
this.foo=internalFoo
…top
function internalFoo(){}
,在底部)为什么不在返回到首选流并定义它之前对Crockford做出让步呢?然后,每个人[似乎都很高兴!]我更喜欢把驱动意图的代码放在最上面,放在最上面。将函数和接口放在上面可以做到这一点。你可以用你喜欢的任何方式做这件事。但这就是我这么做的原因:当我打开文件时,让它能够立即识别它的功能和使用方法。细节如下不,我明白了。我是这么说的。您有一行额外的小代码来声明函数,以使linters满意,然后所有的“细节都跟在前面”。你的风格指南很有分量,但它与门楣的冲突引起了一些类似的问题。声明行比这个问题更好地保留了您的理想,并将停止lint冲突。2、等。我明白了,但我看不出有什么理由在可以设置latedef的时候为var在顶部添加额外的行。这一切都是基于我不觉得吊装功能不好;谢谢只是别指望会喜欢它
(function() {
    try {
        foo();
    } catch(ex) {
        alert("ahhhhh, what's going on?!?!?\n\n" + ex.message);
    }

    function foo() {
        alert("I was hoisted to the top of this scope before execution :)");
    }
})();
(function() {
    try {
        foo();
    } catch(ex) {
        alert("ahhhhh, what's going on?!?!?\n\n" + ex.message);
    }

    var foo = function() {
        alert("I was hoisted to the top of this scope before execution :)");
    }
})();
(function () {
    'use strict';
    var theController;

    angular
        .module('myApp')
        .controller('myAppCtrl', theController);


    theController = function () {
        return "so jslint doesn't complain about empty blocks";
    };
}());