JavaScript编程基础(九)完结散花:闭包原理、实战之投票系统与购物车功能 原创 阁主 2023-08-16 15:25:10 阅读 2010 次 评论 0 条 摘要:继续上次的JavaScript编程基础(八)继续学习,简单记录学习PHP中文网23期JavaScript基础知识,内容包括:闭包原理、实战之投票系统与购物车功能 ## 闭包作用 - 函数调用一旦结束,它内部创建的所有成员全部销毁 - 但是,由于返回一个子函数,而这个子函数又引用了父函数中的成员,会将它访问到的 - 所有成员,保存到它的"作用域链上",只要记录到了作用域链上的成员,它的环境就不能被销毁 - 通过子函数将父函数中的成员, 返回或带出函数给外部 - 通过闭包,顺利的访问到了函数的内部成员 - 闭包的作用域是独立的,相当于其它语言中的"静态变量"的效果 ```html 闭包 ``` ## 投票系统 ![投票系统](https://www.mainblog.cn/zb_users/upload/2023/08/202308152255299633455.png) ```html 投票系统 肖战 张颂文 杨紫 ``` ## 购物车 这个购物车示例大概就如下图所示,里面原本PHP中文网是使用json数据替换静态的html商品俩表,这边我修改成了根据商品数据data.js里的商品总数进行列出到前端,我也保留了中文网原来的html,学习提升最重要。 ![](https://www.mainblog.cn/zb_users/upload/2023/08/202308161520474431545.png) carts.html: ```html 购物车 我的购物车 编号 品名 单位 单价 数量 金额(元) 总计: xxx xxx ``` 样式表carts.css: ```css /* 购物车 */ .carts { width: 450px; border-collapse: collapse; text-align: center; font-weight: lighter; } .carts th, .carts td { padding: 5px; } /* 购物车头部 */ .carts .carts-head { background-color: lightseagreen; color: white; } .carts .carts-body tr { border-bottom: thin solid #ccc; } .carts input[type="number"] { width: 3em; color: seagreen; border: none; } .carts input[type="number"]:focus { outline: thin solid lightseagreen; } /* 购物车底部 */ .carts .carts-foot { background-color: lightcyan; } .carts .pay { display: grid; grid: 1fr / auto-flow; place-content: end; gap: 10px; } ``` 商品数据data.js: ```JavaScript // 模块: 商品数据 export default [ { id: 20, name: "苹果", unit: "Kg", price: 10, num: 5, // 金额 = 数量 * 单价 // 适合用: 访问器属性来创建 get money() { return this.num * this.price; }, }, { id: 22, name: "草莓", unit: "箱", price: 10, num: 3, // 金额 = 数量 * 单价 // 适合用: 访问器属性来创建 get money() { return this.num * this.price; }, }, { id: 66, name: "香梨", unit: "件", price: 30, num: 1, get money() { return this.price * this.num; }, }, { id: 85, name: "西瓜", unit: "个", price: 40, num: 5, get money() { return this.price * this.num; }, }, { id: 99, name: "榴莲", unit: "千克", price: 50, num: 2, get money() { return this.price * this.num; }, }, ]; ``` 购物车模块carts.js: ```JavaScript // 模块: 购物车 import data from "./data.js"; export default { // 1. 商品数据 data, // 2. 总数量(访问器属性) get total() { // (1) 获取商品数组中的数量橡构成的数组 const nums = data.map(function (item) { return item.num; }); //箭头函数的写法是 // const nums = data.map(item => item.num); // (2) 对商品数量数组求和 return nums.reduce(function (pre, cur) { return pre + cur; }); }, // 3. 总金额(访问器属性) get totalMoney() { // (1) 获取商品金额数组 const monies = data.map(function (item) { return item.money; }); // (2) 对商品金额数组求和 return monies.reduce(function (pre, cur) { return pre + cur; }); }, }; ``` ## 附件 本文核心代码附件如下,自行下载。 0404.zip大小:46.05KB已经过安全软件检测无毒,请您放心下载。 本文地址:https://www.mainblog.cn/334.html 版权声明:本文为原创文章,版权归 阁主 所有,欢迎分享本文,转载请保留出处! 免责申明:有些内容源于网络,没能联系到作者。如侵犯到你的权益请告知,我们会尽快删除相关内容。 PREVIOUS:JavaScript编程基础(八)json 跨域 异步编程 NEXT:PHP递归函数方式编写一个删除指定目录方法 文章导航