js代码

js 问题集锦 之 二

断了今生、忘了曾经 提交于 2020-02-26 11:11:04
一、ie下ajax请求缓存问题 在默认情况下,IE会针对请求地址缓存Ajax请求的结果。换句话说,在缓存过期之前,针对相同地址发起的多个Ajax请求,只有第一次会真正发送到服务端。某些情况下,我们需要对同个地址请求实时数据 ,这就需要解决缓存问题。 一般的ajax请求: $(function () { window.setInterval(function () { $.ajax({ url:'url', success: function (result) { $("ul").append("<li>" + result + "</li>"); } }); }, 5000); }); 解决方法一:通过URL地址添加后缀 $(function () { window.setInterval(function () { $.ajax({ url:'url?'+ new Date().toTimeString() , success: function (result) { $("ul").append("<li>" + result + "</li>"); } }); }, 5000); }); 解决方法二: jquery中使用$.ajaxSetup来设置 $(function () { $.ajaxSetup({ cache: false }); window

js设计模式-策略模式

房东的猫 提交于 2020-02-26 10:37:19
在网上找了不少入门实例,依旧认为还是张容铭小哥给的情景最为适合,他的情境是这样的: 项目经理过来说,咱马上要过圣诞节啦,得打折清仓呀,有的商品5折,有的7折,有的9折~ 作为菜鸟的我🤔: 就这么尴尬的一个一个function垒起来~(在下刚入行的时候还真是这么写的😅~)。这时项目经理又来了,圣诞都打折了,元旦也表示一下儿呗,咱们来个满减吧~vip能满100减50,普通用户满100减30... 哪儿说理去,这需求说加就加,项目说改就改,没辙,谁让人家能带着我挣钱呢。不过我依旧固执的认为一个优秀的开发,是能够通过自己的代码设计来承受住需求业务的各种变化的~所以在下经过了一番修炼之后,将策略模式融合了进去,把代码美化了一番。 现在照着张小哥的小白书把代码改好了,如果各位客爷了解状态模式或者看过在下的另一篇 介绍状态模式的博文 的话,一定会对这个结构有点眼熟的,其实他也是由两个部分组成,分别是“策略类”和“环境类(环境方法)”。 上面这个例子中: 策略类 是指strategy对象,他可以保存所有的 策略名对应的算法 。 环境类 是用来调用传入要调用的策略名称和需要的参数,这个调用函数的地方我把书中的原文做了一点修改,原文中是在调用的时候只传了price作为参数 《js设计模式》书中原文 但这也既定了环境类只能摄入一个price价格参数,如果从设计的拓展性来考虑的话

js中级系列三:前端性能优化

随声附和 提交于 2020-02-26 09:15:56
原文链接:http://www.cnblogs.com/xxcanghai/p/5205998.html 链接:http://www.zhihu.com/question/21658448/answer/18903129 前端优化的途径有很多,按粒度大致可以分为两类, 第一类是页面级别的优化,例如 HTTP请求数、脚本的无阻塞加载、内联脚本的位置优化等 ; 第二类则是代码级别的优化,例如 Javascript中的DOM 操作优化、CSS选择符优化、图片优化以及 HTML结构优化等等。 一、页面级优化   1. 减少 HTTP请求数   一个完整的请求都需要经过 DNS寻址、与服务器建立连接、发送数据、等待服务器响应、接收数据这样一个 “漫长” 而复杂的过程。时间成本就是用户需要看到或者 “感受” 到这个资源是必须要等待这个过程结束的,资源上由于每个请求都需要携带数据,因此每个请求都需要占用带宽。另外,由于浏览器进行并发请求的请求数是有上限的 (具体参见此处 ),因此请求数多了以后,浏览器需要分批进行请求,因此会增加用户的等待时间,会给用户造成站点速度慢这样一个印象,即使可能用户能看到的第一屏的资源都已经请求完了,但是浏览器的进度条会一直存在。   减少 HTTP请求数的主要途径包括:   (1). 从设计实现层面简化页面     如果你的页面像百度首页一样简单

JS中的词法作用域(静态作用域)和动态作用域

点点圈 提交于 2020-02-26 08:25:36
首先说明一下, JavaScript没有用动态作用域概念 ,但 this 机制却和动态作用域类似! JavaScript是通过作用域链的方式进行变量查找的,而JS作用域链是词法作用域,也就做静态作用域! 词法作用域:在函数声明(定义)时确定的 动态作用域:在函数调用时确定的 var cat = '有鱼'; function person() { console.log(cat); // 有鱼 } function student() { var cat = '年年'; person(); } student(); 代码分析: ①调用student函数,其内部又调用了person函数,因为JS使用的是词法作用域,即关心的是函数声明时的作用域,所以我们需要看查person定义里面的情况; ②person函数内部输出了cat,此时,找不到cat,按照作用域链特性向外层寻找,找到了cat为‘有鱼’;所以结果输出的是‘有鱼’; ③如果JS支持动态作用域,则需要看person()调用所在的作用域,即cat='年年';不过JS不支持动态作用域! 来源: oschina 链接: https://my.oschina.net/u/4450662/blog/3164871

JS闭包

六月ゝ 毕业季﹏ 提交于 2020-02-26 08:00:37
JS闭包 了解什么是闭包 先来一段代码,根据代码分析能更容易理解: function a ( ) { var num = '我是函数a的变量num' ; return function b ( ) { console . log ( num ) ; } } var res = a ( ) ; res ( ) ; 从函数a上看 :有一个函数a,在函数a的内部,返回了一个函数b,而函数是一个复杂数据类型,即在一个函数内部,返回了一个复杂数据类型。 从函数b上看 :函数b中,访问着函数a的里面的变量(数据),也就是在一个被返回的函数里,有一个外部作用域的变量。 从函数a外部看 :有一个变量res,引用了函数a,但是由于函数a内部存在有一个返回值函数b,则,这个变量,相当于在引用了函数b(调用函数a,执行结果就是函数b)。 代码上的分析: function a ( ) { //这个 num 变量就是函数 a 的变量 var num = '我是函数a的变量num' ; return function b ( ) { //这里在后台输出的num,是函数a的变量 console . log ( num ) ; } } //res 所接收到的是 a 函数执行以后的返回值 //而这个返回值就是函数 a 内部返回的一个复杂数据类型(函数b) //这个时候,触发了一个不会销毁的函数空间 /

js观察者模式发布/订阅

跟風遠走 提交于 2020-02-26 07:18:57
实习期结束,最近回到学校开始学习node.js,node果然是强大。不过在涉及到文件操作的时候,发现要大量使用异步回掉操作。 以前在写页面的时候,从没这么多异步操作,只有在使用'setInterval'和'XMLHttpRequest'时了解了一下异步编程。这次在学习node的过程中,把异步回掉算是弄清楚了。但是在编码书写代码的时候,陷入了回调金字塔(callback hell)。使用es6Promise解决了一些问题。也看到了EventProxy模块基于事件驱动的解决方案。 在使用EventProxy的过程中,有种似曾相识的感觉。有点像观察者模式发布/订阅。首先使用数组缓存订阅者订阅的消息,当订阅者订阅消息的时候,把订阅的消息push到指定消息的队列中,当发布者发布消息的时候,我们遍历执行push到指定消息队列中的回调事件。 而订阅者不需要关心发布者什么时候发布消息。 而发布者不需要关心订阅者订阅的状态。 var observer = new Observe(); var callback = function(num) { console.log("event:"+num); // 输出event:2 }; // 订阅消息 observer.listen("event1", callback); observer.listen("event2", callback); //

用js徒手写一个中间键

天大地大妈咪最大 提交于 2020-02-26 06:22:29
什么是中间键? 下图中 C和D 的部分就是中间键 创建一个js文件 middleware.js 内容如下 const App = () => { const req = { type: 'request', params: [] } const res = { type: 'response' } const middlewares = [] const use = fn => middlewares.push(fn) const runMiddlewares = index => { const count = middlewares.length if (index < count) middlewares[index].apply(null, [req, res, () => runMiddlewares(index + 1)]) } const get = (path, fn) => { runMiddlewares(0) fn.apply(null, [res, res]) } return { get, use } } const app = App() app.use((req, res, next) => { req.params.id = 5; console.log(req, 'request object accessed from middleware 1'

jQuery---jq基础了解(语法,特性),JQ和JS的区别对比,JQ和JS相互转换,Jquery的选择器(基础选择器,层级选择器,属性选择器),Jquery的筛选器(基本筛选器,表单筛选器),Jquery筛选方法

时间秒杀一切 提交于 2020-02-26 05:07:43
jQuery---jq基础了解(语法,特性),JQ和JS的区别对比,JQ和JS相互转换,Jquery的选择器(基础选择器,层级选择器,属性选择器),Jquery的筛选器(基本筛选器,表单筛选器),Jquery筛选方法 一丶什么是JQuery JQuery: ​ JQuery是js的一个库,高度封装了js常用的功能,提供简便方法,调用简单,提高开发效率 js库是包含了把复杂的功能封装到简单的方法中 JQuery的两大特性: ​ 链式编程:可以.的形式实现多个功能 ​ 隐式迭代:在方法的内部进行遍历循环,而不是我们自己再进行循环,简化操作,方便调用 ​ 更好的兼容性:JQuery自动做了浏览器的兼容问题 ​ JQuery的引入: ​ 压缩(XXX.min.js)与未压缩 // 1. 压缩过的文件更小,不占据空间,利于网络传输,可读性不高 // 2. 未压缩的文件占据空间,不利于网络传输,可读性高 引入 :导入文件一定要在自定义script标签之上 <!-- 导入文件一定要在自定义script标签之上 --> <!-- 引入Jq文件 --> <script src="jquery3.4.1.min.js"></script> <script> // 自定义JQ/js代码 </script> //在控制台输入jQuery //结果如下,则表示引入JQ成功 ƒ (e,t){return

jQuery入门简述

余生长醉 提交于 2020-02-26 04:58:31
jQuery 是一套快速的,简洁的 javaScript 脚本库,jQuery 由美国人 John Resig 创建,至今已吸引了来自世界各地的众多 javaScript 高手加入其组织,使用户能更方便地处理 HTML documents、events、实现动画效果, jQuery 还提供了大量插件,并且方便地为网站提供 AJAX 交互,jQuery 能够使用户的 HTML 页保持代码和 HTML 内容分离,也就是说,不用再在 HTML 里面插入一堆 JS 来调用命令了,只需定义 id 即可,它是轻量级的 JS 库(压缩后只有 80+k) ,这是其它的 JS 库所不及的,它兼容 CSS3,还兼容各种浏览器 (IE 6.0+,FF 1.5+,Safari 2.0+,Opera 9.0+) 目前网络上有大量开源的 JS 框架,jQuery 是继 prototype 之后又一个优秀的 JavaScript 框架,jQuery 是目前最流行的 JS 框架,其宗旨是——WRITE LESS,DO MORE,写更少的代码,做更多的事情,很多大公司都在使用 jQuery jQuery 安装: 从官网 http://www.jquery.com 下载 jQuery 库,并导入到 JS 文件就可以使用了 jQuery 使用: jQuery 语法是通过选取 HTML 元素,并对选取的元素进行操作

什么是js-xiaoxu

大憨熊 提交于 2020-02-26 02:50:08
JavaScript基础语法 HTML :标记语言 JavaScript :编程语言 序言 JavaScript发展历史(JS) JavaScript是什么 JavaScript能干什么 1994年,网景公司(Netscape)发布了Navigator浏览器0.9版,这是世界上第一款比较成熟的网络浏览器,轰动一 时。但是这是一款名副其实的浏览器–只能浏览页面,浏览器无法与用户互动,当时解决这个问题有两个办法,一个是采 用现有的语言,许它们直接嵌入网页。另一个是发明一种全新的语言。 liveScript ==> javaScript ==> ECMAscript 2. 1995年Sun公司将Oak语言改名为Java,正式向市场推出。Sun公司大肆宣传,许诺这种语言可以"一次编写,到处运 行"(Write Once, Run Anywhere),它看上去很可能成为未来的主宰。 3. 网景公司动了心,决定与Sun公司结成联盟 4. 34岁的系统程序员Brendan Eich登场了。1995年4月,网景公司录用了他,他只用10天时间就把Javascript设计出 来了。(多肽语言) 5. (1)借鉴C语言的基本语法; (2)借鉴Java语言的数据类型和内存管理; (3)借鉴Scheme语言,将函数提升到"第一等 公民"(first class)的地位; (4)借鉴Self语言,使用基于原型