如何在常用函数中使用局部变量而不是每次都声明它?

时间:2018-05-25 11:06:27

标签: javascript scope

我正在努力建立使用局部变量的技能。为了使变量成为局部变量,我在我想要使用它的函数中声明它,对吗?

但如果我经常使用这个功能,我不会一遍又一遍地声明这个变量吗?这样可以吗?

例如,如果我有这样的函数:

function myFunction() {
  var myVariable;

  // some code that requires myVariable
}

......我每次都会宣布myVariable。每次调用函数时,这是否会为myVariable留出内存空间?有没有解决的办法?

4 个答案:

答案 0 :(得分:5)

是的,这是一个局部变量,即无法在此范围之外访问它。

这样做很好,实际上是推荐做法之一。

是的,每次调用时都会使用内存,但是当函数执行完毕时它被清除/垃圾收集(假设没有其他泄漏)。

还有一件事,你可以更改var to a let以获得更好的块范围...虽然在这个非常简单的情况下没有必要。

答案 1 :(得分:1)

每个函数调用都会在堆栈上创建另一个元素。当弹出堆栈的元素时,所有不再使用的局部变量都被垃圾收集。因此,如果需要,最好在本地声明变量,因为实际上会节省内存。

答案 2 :(得分:0)

也许你应该快速浏览一下javascript最佳实践:Here is one of many possible links

还有声明你不应该使用全局变量。您应该始终在此范围内声明变量。

您不会遇到任何内存问题。垃圾收集器将为您处理它。但是要确定垃圾收集器如何在Javascript中工作,这里有许多可能的链接Garbagecollector explanation javascript

我建议使用let代替var另一个链接以获取更多信息:let explenation

答案 3 :(得分:0)

基本上,如果在函数范围内声明它,则不需要更多的执行时间。

但是,声明它在函数中作用域可以节省内存,因为在执行该函数之后,该变量是不必要的,垃圾收集器在下次执行时删除它(概率)。如果它没有作用域,它仍然存在,直到脚本的执行结束。所以,你在整个运行时都有一个内存中的变量,这可能是不必要的。

为了帮助浏览器,您可以使用ECMAScript 2016 let关键字进行变量声明,因为您可以定义明确的范围,浏览器可以更好地优化您的代码。

此外,使用const关键字代替var可以节省一点内存。因为这样你指定值不再被改变,这个事实导致更少的内存消耗。