每当创建全局变量时,如何记录这些信息?

康拉德·德兹温内​​尔

背景

我刚刚了解到,在DevTools控制台中调用keys(window)(或Object.keys(window))会显示全局范围(source中的变量我在StackOverflow页面上调用了该代码,并得到以下结果:

StackOverflow页面全局变量

变量i似乎引起了我的注意,因为它似乎在全球范围内是一个错误。我试图找到负责声明的代码i,但是结果很麻烦(有很多代码和很多is)。

获取表示以下内容的控制台警告

创建全局变量“ i”(main.js:342)

可能会有用。如何实现该功能?

研究

我发现无论何时创建新变量,我都需要某种事件。

  • 我们确实有制定者在JavaScript中。但是,创建设置器需要您提供属性名称。由于我想监视所有属性,因此我不能真正使用它。
  • __noSuchMethod__MDN)会很完美,但它仅涵盖方法(没有__noSuchProperty__方法)。
  • Object.observeHTML5 Rocks)没有透露有关创建该属性的代码的任何信息(console.trace()仅给我提供了观察函数的名称)。
  • Object.prototype.watchMDN)-与设置器相同,您必须指定属性名称。
  • 每当创建新的全局变量时,调用Object.preventExtensions(window)MDN)都会导致错误,并带有良好的堆栈跟踪。该解决方案的问题在于,它会干扰脚本执行并可能更改其行为。它还不允许我捕获错误并正确格式化。

笔记

  • 我了解jshint / jslint,但我仍然认为在运行时捕获这些声明可能很有用。
  • 我不太在意iSO页面上的变量,您可能可以使用setter查找声明。我的问题涉及此问题的一般解决方案。
保罗·爱尔兰

IMO,您有两个不错的选择:

  1. JSHint。
  2. 严格模式。

当您泄漏全局变量时,两者都会对您大喊大叫。对于您的用例,严格模式可能会更好。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

每当创建全局变量时,如何记录有关全局变量的信息?

来自分类常见问题

如何创建全局变量?

来自分类Dev

如何创建全局变量?

来自分类Dev

每当文本框值更改时,如何创建全局变量以重置值?

来自分类Dev

创建包时定义全局变量

来自分类Dev

如何使用JSDOC记录全局变量的类型

来自分类Dev

如何使在函数内部创建的变量变为全局变量?

来自分类Dev

如何使在函数内部创建的变量变为全局变量?

来自分类Dev

在llvm中创建全局变量时出错

来自分类Dev

何时创建全局变量?

来自分类Dev

何时创建全局变量?

来自分类Dev

快速创建全局变量

来自分类Dev

如何在Swift中创建全局变量?

来自分类Dev

如何在android中创建全局变量?

来自分类Dev

如何在Elixir模块中创建全局变量

来自分类Dev

如何在angularJS中创建全局变量

来自分类Dev

如何在C#中创建全局变量?

来自分类Dev

如何在axios中创建全局变量?

来自分类Dev

如何使用tkinter在嵌套函数中创建全局变量?

来自分类Dev

如何在PHP中动态创建全局变量

来自分类Dev

如何使用用户输入创建全局变量

来自分类Dev

更改参数时如何更改全局变量

来自分类Dev

如何在 webpack 中添加编译时全局变量?

来自分类Dev

如何访问全局变量

来自分类Dev

全局变量是如何声明的?

来自分类Dev

创建其构造函数引用全局变量的类的全局实例时,c ++程序崩溃

来自分类Dev

Javascript:如何创建1.接受全局变量作为参数的函数2.更改该全局变量的值?

来自分类Dev

脚本尝试创建全局变量

来自分类Dev

TypeScript:从模块创建全局变量