javascript --- 变量污染全局作用域问题解决方案

日常写法

// 假设你写了几个关于某个某块的函数
function foo1 () {...}
function foo2 () {...}
function foo3 () {...}
  • 出现问题:假设你的团队中也有一个人定义了foo1函数,那么你写的将会覆盖以前的函数,或者会被覆盖掉.若前面使用let声明了foo1变量.将会报错.

解决污染

你可能会想,将上面3个函数,挂载到一个FooObj对象上面,这样就很棒了.如下:

var FooObj = function () {};
FooObj.foo1 = function() { console.log(1) };
FooObj.foo2 = function() { console.log(2) };
FooObj.foo3 = function() { console.log(3) };
  • 解决:这样可以大幅度的减少全局变量命名冲突问题
  • 新问题: 该FooObj对象是无法复制的,导致每次都是在原来的基础上修改的.
// 假设有另外一个位置使用了你的FooObj.并且修改了foo2的内容.
var a = FooObj;
var b = FooObj;
a.foo2();    // 2
a.foo2 = 'hahaha'; 
b.foo2()  //  TypeError: b.foo2 is not a function// a 和 b引用的是同一块内存上的数据

解决无法复制

// 将需要的方法放入到函数的返回值中
var FooObj = function (){return {foo1: function() { console.log(1) },foo2: function() { console.log(2) },foo3: function() { console.log(3) }}
}// 使用
var a = FooObj();     // FooObj返回了3个方法,挂载到a的属性上
var b = FooObj();   
a.foo1();    // 1
a.foo2();    // 2
a.foo2  = '哈哈哈';
b.foo2();   // 2// 每个函数都有一个return,用于将函数的执行权交出去.
  • 以上解决了’无法复制的问题’

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/250766.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

solr7.4 安装与使用

1.solr7环境要求 solr7需要java8环境,且需要在环境变量中添加 JAVA_HOME变量。 2.solr 安装 下载地址 https://lucene.apache.org/solr/mirrors-solr-latest-redir.html 我下载为7.4版本 在solr5以前solr的启动都有tomcat作为容器,但是从solr5以后solr内…

初入HTML5

在最开始接触HTML5的时候,你会遇到的大多是一些常见常用的属性以及属性值。它们分类广、品种杂且使用率高。到css各种样式的时候,你会接触到更多的东西,各种属性、选择器、盒子模型都是重点。那么,现在我们就看一下它们到底是什么…

javascript --- 让函数的实例可以链式调用

关键: 在每个函数的末尾加上 return thisthis:在javascript中表示当前的对象 栗如: 有以下函数 var fooObj {foo1: function() {console.log(1);},foo2: function() {console.log(2);},foo3: function() {console.log(3);} }// 你想通过 fooObj.foo1().foo2().foo3() // …

ReactiveCocoa基础

本文转载自最快让你上手ReactiveCocoa之基础篇,在此基础上稍作修改,欢迎交流。 有关对 ReactiveCocoa 的看法可以看一下唐巧的这篇ReactiveCocoa 讨论会 ReactiveCocoa思维导图ReactiveCocoa简介 ReactiveCocoa(简称为RAC),是由Gi…

javascript --- 创建一个二维数组

想创建一个 n*n 的矩阵,并全部赋予初始值false 你可能会想到下面 let arr []; for(let i 0 ;i< n;i) {arr[i] [];for( let j 0; j< n; j){arr[i][j] false;} }稍微封装一下: function Cmatrix(n, c) {let arr [];for (let i 0; i < n; i) {arr[i] [];for (le…

配置OpenCV产生flann\logger.h(66): error C4996: ‘fopen': This function or variable may be unsafe问题

转载自&#xff1a;http://guoming.me/%E9%85%8D%E7%BD%AEopencv%E4%BA%A7%E7%94%9Fflannlogger-h66-error-c4996-fopen-this-function-or-variable-may-be-unsafe%E9%97%AE%E9%A2%98 今天使用vs2012配置OpenCV编译出现问题: 1>—— 已启动生成: 项目: Win32ForOpenCV245, 配…

android listview和simpleadapter 给itme 中的控件添加事件

simpleAdapter.setViewBinder(new SimpleAdapter.ViewBinder() { Override public boolean setViewValue(View view, Object data, String textRepresentation) {   Log.d("进入setview","进入setview");if(view instanceof Button &&am…

0 uC/OS 系统精讲索引

uC/OS-II与uC/OS-III放在一起讲&#xff0c;每个例程同时提供两个版本的源代码。 本系列教程主要涉及如下内容&#xff1a; 【原理部分】 1-操作系统简介&#xff1a;基本概念 2-目录结构与测试环境搭建&#xff1a;uC/OS-III emWin VS2015 2.1 官方文件目录结构 【*】uC/Lib …

OPENCV-1 学习笔记

灰度图&#xff1a;2维矩阵 彩色图&#xff1a;3维矩阵 ps&#xff1a;目前大部分设备都是用无符号 8 位整数&#xff08;类型为 CV_8U&#xff09;表示像素亮度 Mat类定义&#xff1a; class CV_EXPORTS Mat { public://一系列函数.../* flag 参数中包含许多关于矩阵的信息…

javascript --- repeat的用处

描述 思路: 最多重复s.length次使用String.prototype.repeat(n)方法可以将字符串重复n次 核心: while( i < len/2){if( s s.slice(0,i).repeat(len /i) ) {return ture;} }总体代码: var repeatedSubstringPattern function(s) {let i 1;let len s.length;while (i …

redis 零散知识

1、单线程 2、默认 16 个库。0~15 3、select &#xff1a;切换数据库 4、DBsize &#xff1a;查看当前数据库的数量 5、keys * &#xff1a;查看当前库的所有 key 6、keys k? &#xff1a;问号是占位符 7、FlushDB &#xff1a;清除当前库 8、FlushAll &#xff1a;清除所有库…

模型评估——定量分析预测的质量

https://blog.csdn.net/hustqb/article/details/77922031 评分参数定义模型评价规则 公共案例预定义值根据度量函数定义你的评分策略应用你自己的评分对象使用多种度量指标分类度量 从二分类到多分类多标签精确度Cohens kappa混乱矩阵分类报告汉明损失Jaccard 相似性相关系数准…

OPENCV-2 学习笔记

1、图像显示 #include<opencv2/opencv.hpp> using namespace cv; //使用命名空间 void main(){Mat srcImage imread(1.jpg);//载入图像imshow(图像标题,srcImage);//显示图像waitKey(0);//等待按键按下 } 2、图像腐蚀 #include <opencv2/opencv.hpp> #incl…

javascript --- 对象的方式体验链式调用

将功能相近的方法写入同一个对象中,是一个很好的编程习惯,便于后期的维护和前期的开发. foo1 var fooObj {foo1: function() {console.log(foo1);return this;} } fooObj.foo1();此有一个对象: fooObj它有一个方法: foo1()foo1打印了一个字符串’foo1’,然后返回了当前的执行…

oracle 数据库查询多条数据的一列值

select sum(case when hc13 then JE else 0 end), sum(case when hc14 then JE else 0 end), sum(case when hc15 then JE else 0 end), sum(case when hc16 then JE else 0 end) from 表名转载于:https://www.cnblogs.com/lkzp123456/p/8608080.html

OPENCV-3 学习笔记

OPENCV-3 学习笔记 imread()读入图&#xff0c;第一个参数&#xff0c;const string&类型的filename&#xff0c;填我们需要载入的图片路径名&#xff0c; 第二个参数&#xff0c;int类型的flags&#xff0c;为载入标识&#xff0c;它指定一个加载图像的颜色类型。 named…

vue --- vue-router(项目模式的导入)

main.js // main.js // 1.1 导入路由的包 import VueRouter from vue-router// 1.2 安装路由 Vue.use(VuerRouter)// 1.3 导入自己的router.js模块 import router from ./router.js// 1.4 挂载router对象在vm实例上 const vm new Vue({el: #app,router })app.vue 原本的 a …

Innodb存储引擎——非聚集索引

如果给表定义了主键&#xff0c;那么表在磁盘上的存储结构就由整齐排列的结构转变成了树状结构&#xff0c;也就是「平衡树」结构&#xff0c;换句话说&#xff0c;就是整个表就变成了一个索引&#xff0c;这就是所谓的「聚集索引」。 这就是为什么一个表只能有一个主键&#x…

cd 切换目录

1. 功能说明 cd是“change directory”中每个氮气的首字母缩写功能是重当前工作目录切换到指定的工作目录&#xff1b;cd是内建命令。 2. 语法格式 cd [option] [dir] cd 选项 目录 3.使用范例 范例1&#xff1a; 切换到/home目录 [rootlocalhost sysconfig]# pwd /etc/s…

OPENCV-4 学习笔记

OPENCV-4 学习笔记 ROI—设定感兴趣的区域&#xff08;region of interest&#xff09; 定义&#xff1a; Mat imageROI; //方法一&#xff1a;通过Rect指定矩形区域 imageROIimage(Rect(500,250,logo.cols,logo.rows)) //方法二 指定感兴趣行或列的范围&#xff08;Ran…