gpt4 book ai didi

javascript - 如何重写此代码以避免使用全局变量?

转载 作者:行者123 更新时间:2023-12-03 09:53:17 25 4
gpt4 key购买 nike

我以前也遇到过这个问题,我使用了全局变量,但我想知道还有什么其他方法可以解决这个问题。

代码来自an html5 canvas tutorial我现在正在玩。

var x = 150;
var y = 150;
var dx = 2;
var dy = 4;
var ctx;

function init() {
ctx = $('#canvas')[0].getContext("2d");
return setInterval(draw, 10);
}

function draw() {
ctx.clearRect(0,0,300,300);
ctx.beginPath();
ctx.arc(x, y, 10, 0, Math.PI*2, true);
ctx.closePath();
ctx.fill();
x += dx;
y += dy;
}

init();

如何避免使用全局变量?

最佳答案

您可以使用模块模式——这是一种提供封装的巧妙方式:

var app = app || {};
app = (function () {
var x = 150; // all these variables are private
var y = 150;
var dx = 2;
var dy = 4;
var ctx;

var draw = function() { // this method is private
ctx.clearRect(0,0,300,300);
ctx.beginPath();
ctx.arc(x, y, 10, 0, Math.PI*2, true);
ctx.closePath();
ctx.fill();
x += dx;
y += dy;
};

return {
init: function() { // this method is public
ctx = $('#canvas')[0].getContext("2d");
return setInterval(draw, 10);
}
}
}());

app.init(); // init() is public, but all the other vars and functions are not

http://addyosmani.com/largescalejavascript/#modpattern 阅读更多相关信息.

关于javascript - 如何重写此代码以避免使用全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12876258/

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