可能重复:
JSLint:在定义之前使用过
我跑JSlint
,看到这样的错误:
'foo' is not defined. var x = foo();
foo
是另一个JavaScript
文件中定义的函数foo.js
.据我所知,没有"import/require"指令JavaScript
来引用foo
另一个源文件中定义的函数.
如何修复此错误JSlint
?
搜索JSLint错误"在定义之前使用过"我发现了这些:
这些答案都不是为什么显示错误.
根据ECMA-262规范函数在执行开始之前进行评估,因此使用该function
关键字声明的所有函数都可用于与它们被声明的位置相关的所有代码(假设它们在该范围内是可访问的).
这也称为吊装.
Douglas Crockford似乎认为最好在使用它的代码之前声明每个函数,而不管提升效果如何.
根据StackOverflowNewbie在他的问题中,这引发了一些代码组织问题.更不用说像我这样的人喜欢在main/init代码下声明他们的功能.
在这些问题上,有一些方法可以避免或修复错误,例如使用函数表达式和函数声明.但他们都没有告诉我错误的原因.甚至不是Crockford的网站.
为什么在声明之前调用函数是错误的,即使它是使用function
关键字声明的?
在JSLint上下文中使用函数表达式而不是函数声明是否更好?如果首选,为什么?
不寻找像这样的答案:
谢谢 :*
我使用的文本编辑器是Brackets.我尝试console.log
在任何JS文件中使用时遇到错误消息.
1 - 创建/打开JS文件
2 - 输入console.log('hello world');
3 - 保存文件
JSLint问题:
error message in JSLint 'console' was used before it was defined.
我有几个这些错误,我不知道如何"正确"解决它,问题是我有很多javascript文件(分离,以便于维护),我包括插件等.
所以在这个例子中我使用来自http://www.openjs.com/scripts/events/keyboard_shortcuts/的快捷方式
这只是定义了快捷方式
shortcut = {.......
Run Code Online (Sandbox Code Playgroud)
然后,当我在我的代码中使用它时
shortcut.add("F1", function () { showDialog(); }, { 'type': 'keydown', 'propagate': false, 'target': editor_document });
Run Code Online (Sandbox Code Playgroud)
jslint会抱怨
JS Lint:在定义之前使用了'快捷方式'.
我也有自己的代码,我使用在其他文件中声明的函数,所以解决这个问题的"正确"方法是什么