Javascript避免函数之间的全局变量
Javascript avoid global variables between functions
我正在尽力使用具有全局范围的变量来aviod,但我不确定实现这一目标的最佳方法,目前我有一个函数setSizes(),(这在鼠标按下时运行一次)获取所有测量值和doStuff(),(这是在mousemove上连续运行的),它使用所有大小来执行各种操作:
var sizes = {};
sizes.myWidth = 0;
sizes.myHeight = 0;
sizes.myPadding = 0;
sizes.myMargin = 0;
function setSizes(){
//sets all sizes
}
function doStuff(){
//does stuff with sizes
}
避免此类代码的最佳方法是什么?我发现自己出于"简单"而不断这样做,但我无法想象这是最有效的方法。
您可以在它周围放置一个新的范围
(function () {
"use strict";
var sizes = {};
sizes.myWidth = 0;
// ...
function setSizes() {
// ...
}
function doStuff() {
// ...
}
})();
或者,如果可能,只需将对象作为参数传递即可。这有点取决于情况感觉更干净(对我来说)。你必须问问自己,一个对象是只与该函数相关还是与整个作用域相关。
您也可以查看各种模块模式,因为它们将向您展示如何编写模块化代码的技术。例如,要将特定模块与另一个代码一起使用,只需导出一个(且仅一个)变量作为您自己的自定义命名空间:
(function (exports) {
"use strict";
var someVar = "I won't leak to the global space!";
exports.yourObject = {
someFunction: function () {
// ...
}
};
})(window);
yourObject.someFunction();
这只是一个非常简单的例子,请查看更常见的例子以获得更好的例子。
(function () {
var sizes = {
myWidth: 0,
myHeight: 0,
myPadding: 0
myMargin: 0
};
function setSizes(){
//sets all sizes
}
function doStuff(){
//does stuff with sizes
}
}());
此构造是一个 IIFE(立即调用的函数表达式),这样您以前的全局函数在外部不可见,而仅在 IIFE 范围内可见。顺便说一句,您使用了一个更适合对象的数组。
相关文章:
- 函数参数中的数据与指定变量之间的任何性能差异
- 全局变量和全局对象的属性之间有什么区别吗
- delete关键字在全局变量上的不同行为
- 在javascript函数中设置全局变量
- 如何将getJson的响应保存在全局变量中
- 什么's是处理多个js文件之间交互的简单方法,同时避免溢出全局变量
- Javascript避免函数之间的全局变量
- 在两个js文件之间共享全局变量
- JS全局变量类型之间的差异
- 事件处理程序之间的全局变量
- 在JQuery多个函数之间使用全局变量
- Jquery和全局变量作用域之间的问题
- 为什么我的全局变量不携带函数之间的值
- 面板内容脚本和页面内容脚本之间的全局变量在firefox插件
- 在嵌入页面之间传递javascript全局变量,或者从main传递到embed
- 在加载到Meteor的javascript文件之间共享全局变量
- javascript中局部变量和全局变量之间的区别
- html页面之间的Javascript全局变量
- 是否可以限制全局变量仅在2个脚本文件之间共享
- 运行和控制器之间的全局变量