gpt4 book ai didi

javascript - 重复变量会导致内存泄漏吗?

转载 作者:行者123 更新时间:2023-11-28 11:40:25 26 4
gpt4 key购买 nike

关于设置全局和局部变量,我已经阅读了有关内存泄漏以及如何避免它们的内容。我还是有点困惑。

假设这些示例发生在页面深处,其中使用了其他全局和局部变量。

如果我不打算重用变量,我应该还是不应该使用var

如果我在函数中使用var一次,当我操作或修改变量时是否需要再次使用它?

// EMAMPLE ONE
$("#AddBrandSave").click(function() {
// DO THIS?
Brand = $("#Brand").val();
// OR DO THIS?
var Brand = $("#Brand").val();
});

// EMAMPLE TWO
$("#AddBrandSave").click(function() {
// DO THIS?
Brand = $("#Brand").val();
Brand = Brand.substring(7);
Brand = Brand.someMathFunction();
// OR DO THIS?
var Brand = $("#Brand").val();
Brand = Brand.substring(7);
Brand = Brand.someMathFunction;
// OR DO THIS?
var Brand = $("#Brand").val();
var Brand = Brand.substring(7);
var Brand = Brand.someMathFunction();
});

最佳答案

理解变量

Javascript 恰好有两个级别的作用域:全局作用域和函数作用域。当您使用 var 时,该变量的声明将被提升到其所在作用域的顶部。例如:

$("#AddBrandSave").click(function() {
var Brand = $("#Brand").val();
var Brand = Brand.substring(7);
var Brand = Brand.someMathFunction();
});

被解释为

$("#AddBrandSave").click(function() {
var Brand;
Brand = $("#Brand").val();
Brand = Brand.substring(7);
Brand = Brand.someMathFunction();
});

如果您没有在函数中包含 var,“Brand”将在全局范围内声明,因此

$("#AddBrandSave").click(function() {
Brand = $("#Brand").val();
Brand = Brand.substring(7);
Brand = Brand.someMathFunction();
});

解释为:

var Brand; 
$("#AddBrandSave").click(function() {
Brand = $("#Brand").val();
Brand = Brand.substring(7);
Brand = Brand.someMathFunction();
});
// The global variable Brand will only exist after #AddBrandSave is clicked
// or it will clobber the global variable Brand if it already existed

这就是为什么建议您在函数顶部使用 var 声明要在函数中使用的任何变量,因为这在技术上无论如何都会发生,因此更容易了解。

对同一个变量多次使用 var 可能会导致问题,因为它使解释器更难检查该变量是否已经存在 - 我不知道它是否会导致内存泄漏,但是为什么要冒险呢?

关于javascript - 重复变量会导致内存泄漏吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7150717/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com