【问题标题】:Have javascript declare (by default) undeclared variables to the current local scope (based on first use) instead of global scope?javascript 是否将(默认情况下)未声明的变量声明到当前本地范围(基于首次使用)而不是全局范围?
【发布时间】:2015-01-11 23:05:03
【问题描述】:

这可以通过编写一些代码来拦截全局范围默认声明,还是通过每个程序或函数都可以访问的 javascript 引擎本身的设置来完成?

我的意思是,如果我可以在程序(或函数)的顶部,告诉 javascript 引擎对未声明的变量使用本地范围而不是全局范围......那么,当 javascript 引擎编译每个函数时,它会在本地范围内声明它们。

我理解如果你想在当前范围之外声明一个变量,那应该明确地完成,因为没有人知道你想在哪里声明它,但我认为默认为全局范围会留下太多的错误空间并且强制太多在每个函数中输入 var 语句,所以如果可能的话,我想更改程序中的默认值。

我的主要目的是避免在每个函数顶部的 var 语句中键入局部变量列表,并避免在我使用局部变量时保持该列表与局部变量同步一个函数。不允许全局范围默认值也可以降低出错的风险。

我绝不希望未声明的变量最终位于比首次使用它们的范围更高的范围内。让它们默认为我可以看到的全局范围没有任何价值。

我知道我可以在当前范围(或全局范围)中显式声明变量,但希望避免这样做并使用比 JavaScript 中内置的全局范围默认值更有用的默认值。

我也知道我可以使用“使用严格”来强制显式声明所有变量。不想争论它的对错,而只是询问是否有任何方法可以将给定函数的默认值更改为本地范围而不是全局范围。

【问题讨论】:

  • 我不知道有这样的选择。但是你可以use strict 来限制可能性。
  • 您认为这条道路的根本问题是什么?
  • 使用CoffeeScript,它解决了这个特殊的烦恼,并使 Javascript 语法在整个 IMO 中更加可口。
  • 也许我不只是不理解你的问题,而是声明未声明的变量是什么意思?
  • 缺点是追逐范围错误,对我来说没有多大意义,似乎你正在与语言抗争而不是接受它

标签: javascript scope javascript-engine


【解决方案1】:

不,Javascript 的行为方式就是这样,没有切换开关来改变它的变量声明规则。

'use strict' 是您可以用来帮助您catch problems more easily 的一个选项,但它不会改变规则。

你想要的是一种不同的语言;例如 CoffeeScript,一个 Javascript 预处理器,除其他外,它恰好可以显式地解决这个 variable declaration issue

【讨论】:

  • IMO CoffeeScript 之于 JavaScript 就像 LESS/SASS 之于 CSS。一旦你习惯了它,就很难想象回到裸机写东西的方式。它很好地集成到我的 IDE 中,甚至没有任何额外的负担;我只是用 CoffeeScript 编写代码,我的 IDE 透明地编译它,我在代码中像往常一样使用 .js 文件。 Chrome 的调试器甚至可以透明地映射回原来的 CoffeeScript 代码,太棒了。
猜你喜欢
  • 1970-01-01
  • 2017-08-19
  • 2020-12-10
  • 1970-01-01
  • 1970-01-01
  • 2013-11-06
  • 1970-01-01
  • 2020-06-08
  • 1970-01-01
相关资源
最近更新 更多