js代码

浅浅谈Js闭包

丶灬走出姿态 提交于 2020-02-24 08:04:13
闭包就是能够读取其他函数内部变量的函数。由于在javascript中,只有函数内部的子函数才能读取局部变量,所以闭包可以理解成“定义在一个函数内部的函数“。 要了解闭包,首先了解函数,函数分为两个阶段。 函数定义阶段: 在内存中开辟一个存储空间 把函数体内的代码当作字符串一摸一样的放在这个空间中,碰到的所有变量都不进行解析 把这个空间地址赋值给函数名(变量名) 函数调用阶段 按照函数名(变量名)找到对应的存储空间 从新开辟一个函数 执行空间 在这个执行空间里面进行形参赋值 在这个执行空间里面进行预解析 把函数存储空间的代码复制一份到执行空间里面执行一遍 执行完毕之后, 这个开辟出来的执行 空间销毁 注意: 每一次函数调用都会开辟一个执行空间 调用一次,开辟一个执行空间,执行完毕代码销毁。 再次调用的时候,再次开辟一个执行空间,执行完毕代码销毁 闭包: function a(){ //这个num变量就是函数a的私有变量 var num = 100; return function b(){ console.log(num); } } //res接受的就是函数a内部返回的一个复杂数据类型(函数b) var res = a(); //res接受的就是函数b的执行空间的地址,就是函数a执行以后的返回值 res() // 当 res 调用的时候, 打印 num // 打印出来的就是 a

JS正则表达式

倖福魔咒の 提交于 2020-02-24 07:00:34
JavaScript 正则表达式: 正则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE)使用单个字符串来描述、匹配一系列符合某个句法规则的字符串搜索模式。 搜索模式可用于文本搜索和文本替换。 RegExp对象 RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具。 什么是正则表达式? 正则表达式是由一个字符序列形成的搜索模式 当你在文本中搜索数据时,你可以用搜索模式来描述你要查询的内容 正则表达式可以使一饿简单的字符,或一个更复杂的模式 正则表达式可用于所有文本搜索和文本替换的操作` 语法 /正则表达式主体/修饰符(可选) 其中修饰符是可选的。 创建RegExp对象的语法 new RegExp ( pattern , attributes ) ; 参数 参数 pattern 是一个字符串,指定了正则表达式的模式或其他正则表达式。 参数 attributes 是一个可选的字符串,包含属性 “g”、“i” 和 “m”,分别用于指定全局匹配、区分大小写的匹配和多行匹配。ECMAScript 标准化之前,不支持 m 属性。如果 pattern 是正则表达式,而不是字符串,则必须省略该参数。 返回值 返回值 一个新的 RegExp 对象,具有指定的模式和标志。如果参数 pattern 是正则表达式而不是字符串,那么

JS闭包

假装没事ソ 提交于 2020-02-24 04:57:44
JS闭包 了解函数的两个阶段 函数的定义阶段 在内存中开辟一个存储空间 把函数体内的代码当作字符串一模一样的放在这个空间中(遇到的所有变量都不进行解析) 把这个空间地址赋值给函数名(变量名) 函数的调用阶段 按照函数名(变量名)找到对应的存储空间 从新开辟一个函数 执行空间 在这个执行空间里面进行形参赋值 在这个执行空间里面进行预解析 把函数存储空间的代码复制一份到执行空间里面执行一遍 执行完毕之后, 这个开辟出来的执行 空间销毁 注意 :函数每次调用的时候都会开辟一个执行空间,调用完毕代码就会被销毁,当你再次调用的时候会再开辟一个执行空间,执行完毕代码就会被销毁。 举个栗子: var num = 100 function fn ( ) { console . log ( '数字: ' + num ) } fn ( ) fn ( ) 函数的两个阶段上图代码的图解: 解析: 函数定义阶段 在内存中开辟了一个函数存储空间(xxff00) 把 console.log('数字: ’ + num) 这句代码放在这个存储空间中, 此时 num 变量没有解析, 存储的就是 num 把 xxff00 这个空间地址赋值给了 fn 这个函数名 函数调用阶段 按照 fn 里面存储的地址, 找到 xxff00 这个函数存储空间 开辟一个函数执行空间(xxff11), 在运行内存里面 在 xxff11

js对象

十年热恋 提交于 2020-02-24 04:14:16
对象 定义 无序的键值对的集合 创建对象的两种方式 字面量: var student = {};建了一个空对象 内置构造函数 var student = new Object(); 对象的赋值和取值 取值 对象名.属性名 ------如果存在,返回响应值;如果不存在,undefined 对象名.方法名------直接获取,返回函数体,对象名.方法名(),即调用这个方法 赋值(类似数组) 对象名.属性名-----存在,直接覆盖,不存在,新建属性,在赋值 操作对象的两种语法 点语法 对象名.属性名: 简单方便,不支持变量 中括号语法: 对象名[‘属性名’] 灵活,支持字符串和变量 对象名[变量名] :通过变量值找到属性名,然后再去对象里面查找对应的值 对象的遍历 for(var k in obj){……} k键(属性名) obj[k] 值(属性值) 批量创建对象 工厂函数 本质就是一个函数,将创建对象的代码进行封装成函数 特点:创建出来的类型都时Object类型 function createObject()({ var obj = {……}; return onj; } 注意点:1.返回值—调用时通过传过来的实参对对象进行具体的赋值 对象的方法中,this指的是当前的对象 自定义构造函数 特征:需要结合new使用,创建出来的对象有自己的类型 构造函数中new的作用 建立一个新对象

js面向对象

笑着哭i 提交于 2020-02-24 04:10:09
什么是面向对象 在js中对象是一个无序的数据集合或者也可以说是属性和方法的集合,可以动态的添加属性可方法。面向对象是一种软件开发的思想和面向过程是相对应的,就是把程序看作一个对象,将属性和方法封装其中,以提高代码的灵活性、复用性、可扩展性。面向过程是按需求一步一步的用代码从上往下实现,这样做代码不易维护、复用、扩展。所以在大型项目中我们需要以面向对象的方式去开发项目,这样就体现了用面向对象的方法写出来的代码易维护、易复用、易扩展。 面向对象的特征:封装、继承、多态、抽象。 封装 我对封装的理解就是把属性和方法封装其中,将不需要对外公开的内容隐藏起来提供接口让用户访问属性和方法。 继承 继承就好比我继承了我爸部分的相貌特征但我和我爸又不完全长一个样子,而且我自己没有钱但我爸有钱,我爸的钱可以给我花。就是指子类构造函数继承了父类构造函数的一些属性和方法,但其本身也有一些自己的方法和属性。 多态 多态性是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。比如一个我养了条狗和一个猫,我对它们发出“叫”的指令时它们一个是“汪汪汪”的叫一个是“喵喵喵”的叫,我给的指令是一样的它们发出来的声音却不一样。 抽象 先不去考虑细节的东西,从大的方向开始。比如学生就是一个抽象实体,他的属性并不足以描述出一个人,需要更多的细节才能描述一个人的方方面面。使用抽象可以尽可能避免过早考虑一些细节

java到js的中文无法显示,中文显示位(?)

空扰寡人 提交于 2020-02-24 03:31:49
今天遇到这么一个问题,用js调用java的get请求,得到的json数据中中文无法正常显示,jsp文件中都是申明utf-8格式的,查询了一番,发现问题出现在@ResponseBody上 @ResponseBody默认的编码格式为 ISO-8859-1 ,需要修改,在@GetMapping中加入produces的内容 参考: springmvc @ResponseBody乱码,兼容UTF-8格式 java代码 @Controller public class ExamController { @Autowired private ExamService examService; @GetMapping(value = "/getPaper", produces = "application/json; charset=utf-8") @ResponseBody public String getPaper(HttpSession session) { Paper paper = null; try { paper = this.examService.getPaper(); }catch(SystemException e){ session.setAttribute("msg", e.getMessage()); }catch(Exception e1) { e1

实际操作文件上传漏洞-upload-labs

倾然丶 夕夏残阳落幕 提交于 2020-02-24 02:54:57
文件上传之前端js绕过。 第一种方法: 首先在网站找到上传点。 上传文件为 phpinfo.php其中代码为: 点击上传 这时候查看F12查看源代码 我们会发现有一个事件我们去搜索查看一下这个checkFile()函数 我们可以直接删除这个事件然后进行上传 再进行上传文件 上传成功,然后右键图片,选择复制图像地址,打开另外一个标签页 第二种方法: 先使用正常后缀名.jpg过了前端,然后使用burp进行抓包,把后缀名.jpg改成.php,然后发送服务器端即可。 来源: https://www.cnblogs.com/mrlpl/p/12355348.html

js绑定事件

一世执手 提交于 2020-02-24 02:13:23
在JavaScript中,常用的绑定事件的方法: 内联模式,在DOM元素中直接绑定。 外联(脚本)模式,在JavaScript代码中绑定。 绑定事件监听器。`` 1、内联模式,就是把事件绑定直接写在DOM内 function btnClick ( ) { alert( "内联模式" ); //当点击按钮后会去执行字符串中的代码 } < button onclick = "btnClick();" > 内联模式 < / button > 2、外联模式,在javascript代码中绑定 window . onload = function ( ) { var oBtn = document . getElementById ( "btn" ) ; oBtn . onclick = function ( ) { alert ( "外联模式" ) ; } } < button id = 'btn' > 外联模式 < / button > 3、绑定事件监听器 事件监听器(低版本IE浏览器不支持) addEventListener 格式: 元素节点.addEventListener() 参数: 第一参数:绑定的事件类型 click mouseover 第二参数:绑定的函数 函数名/匿名函数 第三参数:默认是false (事件冒泡(false) 事件捕获(true)) /

JS常用的三种设计模式

拈花ヽ惹草 提交于 2020-02-24 01:01:16
1.单例模式 保证一个类仅有一个实例,并提供一个访问它的全局访问点。– 百度百科 单例模式是一种常用的模式,有一些对象我们往往只需要一个, 比如线程池、全局缓存、浏览器中的window对象等。在JavaScript开发中,单例模式的用途同样非常广泛。试想一下,当我们单击登录按钮的时候,页面中会出现一个登录浮窗,而这个登录浮窗是唯一的, 无论单击多少次登录按钮,这个浮窗都只会被创建一次, 那么这个登录浮窗就适合用单例模式来创建。 下面是单例模式的 核心代码 : // 准备一个构造函数 // 将来要 new 的 function Person ( ) { } // 准备一个单例模式函数 // 这个单例模式函数要把 Person 做成一个单例模式 // 将来再想要 new Person 的时候只要执行这个 singleton 函数就可以了 function singleton ( ) { let instance if ( ! instance ) { //如果 instance 没有内容 //来到这里,证明 instance 没有内容 //给他赋值为 new Person instance = new Person ( ) } //返回的永远都是第一次 new Person 的实例 //也就是永远都是一个实例 return instance } const p1 = singleton

JavaScript基础语法

喜夏-厌秋 提交于 2020-02-23 19:11:12
【使用JS的三种方式】 1、在html标签中,直接使用JS(并不提倡使用): 栗子:<button onclick="alert('我好啊')">点本宝宝</button> 不符合内容与行为分离的要求! 2、在html页面中使用<script></script>包裹JS代码: 栗子:<script type="text/javascript"> JS代码; </script> script标签可以放到页面的任何位置。 3、引入外部的JS文件 <script language="JavaScript" src="JS/01.js" ></script> 【注意事项】 1、<script></script>可以嵌入页面的任意位置。但是,位置的不同会导致JS代码的执行顺序不同; 比如:<script></script>放到<body></body>前面,则JS代码会在页面加载之前执行。 2、引入外部的JS,<script></script>必须是成对出现的标签。而且,标签中不能有任何JS代码。 JS中多行注释。ctrl+shift+/ JS中单行注释。ctrl+/ 【JS中变量】 1、JS中变量申明的写法: var num=1;//使用var申明的变量,属于局部变量,只在当前作用域有效; num=1;//不用var申明的变量,默认为全局变量,在整个JS文件中有效。 var x=1,y=2