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

Solution #7- use a local flag

We can go back to the idea of using a flag, but instead of making it global (which was our main objection) we can use a Immediately Invoked Function Expression (IIFE): we'll see more on this in Chapter 3, Starting Out with Functions - A Core Concept, and in Chapter 11, Implementing Design Patterns - The Functional Way. With this, we can use a closure, so clicked will be local to the function, and not visible anywhere else:

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

See how clicked gets its initial false value, from the call at the end.

This solution is along the lines of the global variable solution, but using a private, local variable is an enhancement. About the only objection we could find, is that you'll have to rework every function that needs to be called only once, to work in this fashion. (And, as we'll see in the following section, our FP solution is similar in some ways to it.) OK, it's not too hard to do, but don't forget the Don't Repeat Yourself (D.R.Y) advice!

主站蜘蛛池模板: 金寨县| 紫阳县| 涞源县| 崇州市| 商丘市| 七台河市| 昌图县| 正蓝旗| 晴隆县| 舟曲县| 衡南县| 甘孜县| 南安市| 大丰市| 阜城县| 新田县| 郁南县| 临江市| 元江| 兖州市| 环江| 菏泽市| 章丘市| 伊通| 宿州市| 灵武市| 大冶市| 萨迦县| 中宁县| 渭源县| 额尔古纳市| 新营市| 吉隆县| 增城市| 五莲县| 香港 | 水富县| 临邑县| 广平县| 东山县| 泽州县|