JSHint错误-预期为赋值或函数调用,而实际上看到的是表达式。

3
为什么以下代码会在 JSHint 中触发 "Expected an assignment or function call and instead saw an expression."?我认为这是保护一个块不执行,如果一个特定的变量或变量未定义的正确方法...
!function($) {
    "use strict";

    // jQuery-based code here
    $('.test').show();
}(window.jQuery);

这可能是JSHint或编码风格强制执行的错误。因为!function($){"use strict";}(window.jQuery);触发了错误,而(function($){"use strict";}(window.jQuery));没有。在JavaScript中,函数调用比!运算符具有更高的优先级。 - Prusse
1个回答

2
用括号将函数调用整个包起来替换掉前面的感叹号(例如(function(a,b){}("a","b"))),一切都应该正常了。这促使我问为什么一开始它会在那里,因为该函数没有返回值。
任何表达式(与赋值相对)都会被JSHint标记并显示您引用的信息。

1
在编写自调用函数时,有一些编码风格规定使用 !function(/*...*/){/*...*/}(/*...*/);,以便让阅读代码的人知道它将在定义后被调用。 - Prusse
我从未遇到过这种情况,我使用的符号是将函数定义放在括号中:(function (/*...*/) {/*...*/}) (/*...*/). 我可以理解 ! 符号的原理。 - HBP
2
我也使用“括号内的函数定义”符号,我认为“!”这个符号很丑,可以用一个好看的注释来代替。 - Prusse

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接