官术网_书友最值得收藏!

Solution #2 - use a global flag

The solution most people would probably think of first, is using some global variable to record whether the user has already clicked on the button. You'd define a flag named something like clicked, initialized with false. When the user clicks on the button, if clicked was false, you change it to true, and execute the function; otherwise, you don't do anything at all:

let clicked = false;
.
.
.
function billTheUser(some, sales, data) {
if (!clicked) {
clicked = true;
window.alert("Billing the user...");
// actually bill the user
}
}

For more good reasons NOT to use global variables,
read http://wiki.c2.com/?GlobalVariablesAreBad.

This obviously works, but it has several problems that must be addressed:

  • You are using a global variable, and you could change its value by accident. Global variables aren't a good idea, neither in JS nor in other languages.
  • You must also remember to re-initialize it to false when the user starts buying again. If you don't, the user won't be able to do a second buy, because paying will have become impossible.
  • You will have difficulties testing this code, because it depends on external things (that is, the clicked variable).

So, this isn't a very good solution... let's keep thinking!

主站蜘蛛池模板: 永和县| 门源| 襄垣县| 固阳县| 牙克石市| 嘉鱼县| 青海省| 新巴尔虎右旗| 东安县| 平果县| 汝南县| 金溪县| 肥西县| 南陵县| 屯门区| 周至县| 卢龙县| 开化县| 衡阳县| 威信县| 常德市| 浮山县| 玛纳斯县| 铜梁县| 都昌县| 许昌县| 昌图县| 云和县| 桃园县| 鹤峰县| 拉萨市| 长沙县| 镇康县| 襄汾县| 河曲县| 吉首市| 高碑店市| 文化| 霞浦县| 奉节县| 龙海市|