VS Code中使用Function构造函数未触发警告的原因咨询
为什么VS Code没对
Function(n) { ... }给出警告? 嘿,这个问题其实涉及到VS Code的语法检查逻辑和JavaScript本身的特性,我来给你拆解清楚:
核心原因:Function是合法内置构造函数,默认检查不标记“不当使用”
首先要明确:JavaScript里的Function是标准内置构造函数,和eval不一样——虽然它的使用同样存在安全、性能隐患,但它本身不属于“语法错误”或默认被标记为危险的API。VS Code的默认语法检查只会捕获明确的语法错误,不会主动对合法API的“不推荐用法”发出警告。
而你写的var laugh = Function(n) { // my code };其实是语法错误,但VS Code没提示的话,大概率是这两个原因:
- 你的VS Code没有开启严格语法检查模式:默认情况下,VS Code对JavaScript的检查比较宽松,一些非致命的语法歧义不会被立刻标记。
- 没有配置ESLint这类代码检查工具:VS Code的内置检查能力有限,需要ESLint这类工具来捕获“不推荐写法”或潜在错误。
对比function和Function的本质区别
你写的正确代码:
var laugh = function(n) { // my code };
这是标准的函数表达式,属于JavaScript推荐的函数定义方式。
而错误写法Function(n) { ... }不符合Function构造函数的正确调用方式——它的正确用法应该是:
var laugh = new Function('n', '/* 这里写函数体代码 */');
这种写法是合法的(虽然不推荐),此时VS Code默认不会发出警告,因为它是符合语法规则的代码。
怎么让VS Code给出警告?
如果你想让这类问题被及时捕获,可以做这两件事:
- 开启VS Code的严格模式:打开设置,搜索
javascript.strictMode并勾选开启,这样一些语法错误会被内置检查捕获。 - 配置ESLint:安装VS Code的ESLint插件,然后在项目中启用
no-new-func规则,这个规则会禁止使用Function构造函数,同时还能帮你捕获像缺少分号这类代码风格问题。
内容的提问来源于stack exchange,提问作者Abhishek Raut
相关产品推荐
相关产品推荐

