js代码

初学require.js

拈花ヽ惹草 提交于 2020-02-11 12:40:14
  引入require.js,可以解决的问题: (1)实现js文件的异步加载,避免网页失去响应; (2)管理模板之间的依赖性,便于代码的编写和维护。   它的模块管理遵循AMD规范(Asynchronous Module Definition - 异步加载模块规范);所谓AMD规范,就是为了解决模块化编程带来的代码加载先后顺序问题,以及常规为解决该阻塞问题方式带来的各种附加问题。    核心 是通过define方法将无序混乱代码分割为有序的模块,通过require方法实现代码的模块加载。 一、require.js的加载    把从官网下载的文件放在js目录下,按如下方式引用: <script src="js/require.js"></script>    加载这个文件,也可能造成网页失去响应。解决办法有两个,一个是把它放在网页底部加载,另一个是写成下面这样: <script src="js/require.js" defer async="true" ></script>    加载require.js以后,下一步就要加载我们自己的代码了。假定我们自己的代码文件是main.js,也放在js目录下面。那么,只需要写成下面这样就行了: <script src="js/require.js" data-main="js/main"></script>    data

requireJS 从概念到实战

久未见 提交于 2020-02-11 07:00:52
原文转至:http://www.cnblogs.com/yingzi1028/p/6693852.html 小颖目前所在的公司在用require.js,小颖一直说要写个小demo,今天抽空把自己写的小demo分享出来,希望对初学者有一些帮助,嘻嘻 学习资料: CSDN上的一篇文章: 使用RequireJS优化Web应用前端 阮一峰老师的网络日志: Javascript模块化编程(三):require.js的用法 卷柏的花期的随笔: requireJS 从概念到实战 demo目录: 小颖就不在自己博客里卖弄了,像:为什么要用require.js?、require.js的加载、主模块的写法等小颖就不在我的博客里面写了,详细的大家请移步到:阮一峰老师的网络日志: Javascript模块化编程(三):require.js的用法 中去看看。小颖就主要给大家分享下小颖理解的 require.js模块的加载和AMD模块的写法 在看小颖写的demo之前大家先看下阮一峰老师的网络日志: Javascript模块化编程(三):require.js的用法 中模块的加载和AMD模块的写法的详解: 模块的加载: 上一节最后的示例中,主模块的依赖模块是['jquery', 'underscore', 'backbone']。默认情况下,require.js假定这三个模块与main.js在同一个目录

js的单线程和异步

泄露秘密 提交于 2020-02-11 06:25:55
引用 :https://www.cnblogs.com/woodyblog/p/6061671.html 前言 说到js的单线程(single threaded)和异步(asynchronous),很多同学不禁会想,这不是自相矛盾么?其实,单线程和异步确实不能同时成为一个语言的特性。js选择了成为单线程的语言,所以它本身不可能是异步的,但js的宿主环境(比如浏览器,Node)是多线程的,宿主环境通过某种方式(事件驱动,下文会讲)使得js具备了异步的属性。往下看,你会发现js的机制是多么的简单高效! 说说浏览器 js是单线程语言,浏览器只分配给js一个主线程,用来执行任务(函数),但一次只能执行一个任务,这些任务形成一个任务队列排队等候执行,但前端的某些任务是非常耗时的,比如网络请求,定时器和事件监听,如果让他们和别的任务一样,都老老实实的排队等待执行的话,执行效率会非常的低,甚至导致页面的假死。所以,浏览器为这些耗时任务开辟了另外的线程,主要包括http请求线程,浏览器定时触发器,浏览器事件触发线程,这些任务是异步的。下图说明了浏览器的主要线程。 图片来自popAnt 画得太好,忍不住引过来 ( http://blog.csdn.net/kfanning/article/details/5768776 ) 再说说任务队列 刚才说到浏览器为网络请求这样的异步任务单独开了一个线程

js的单线程和异步

折月煮酒 提交于 2020-02-11 06:23:18
前言 说到js的单线程(single threaded)和异步(asynchronous),很多同学不禁会想,这不是自相矛盾么?其实,单线程和异步确实不能同时成为一个语言的特性。js选择了成为单线程的语言,所以它本身不可能是异步的,但js的宿主环境(比如浏览器,Node)是多线程的,宿主环境通过某种方式(事件驱动,下文会讲)使得js具备了异步的属性。往下看,你会发现js的机制是多么的简单高效! 说说浏览器 js是单线程语言,浏览器只分配给js一个主线程,用来执行任务(函数),但一次只能执行一个任务,这些任务形成一个任务队列排队等候执行,但前端的某些任务是非常耗时的,比如网络请求,定时器和事件监听,如果让他们和别的任务一样,都老老实实的排队等待执行的话,执行效率会非常的低,甚至导致页面的假死。所以,浏览器为这些耗时任务开辟了另外的线程,主要包括http请求线程,浏览器定时触发器,浏览器事件触发线程,这些任务是异步的。下图说明了浏览器的主要线程。 图片来自popAnt 画得太好,忍不住引过来 ( http://blog.csdn.net/kfanning/article/details/5768776 ) 再说说任务队列 刚才说到浏览器为网络请求这样的异步任务单独开了一个线程,那么问题来了,这些异步任务完成后,主线程怎么知道呢?答案就是回调函数,整个程序是事件驱动的

require.js js模块化方案

南笙酒味 提交于 2020-02-11 05:51:54
一、为什么要用require.js? 最早的时候,所有Javascript代码都写在一个文件里面,只要加载这一个文件就够了。后来,代码越来越多,一个文件不够了,必须分成多个文件,依次加载。下面的网页代码,相信很多人都见过。   <script src="1.js"></script>   <script src="2.js"></script>   <script src="3.js"></script>   <script src="4.js"></script>   <script src="5.js"></script>   <script src="6.js"></script> 这段代码依次加载多个js文件。 这样的写法有很大的缺点。首先,加载的时候,浏览器会停止网页渲染,加载文件越多,网页失去响应的时间就会越长;其次,由于js文件之间存在依赖关系,因此必须严格保证加载顺序(比如上例的1.js要在2.js的前面),依赖性最大的模块一定要放到最后加载,当依赖关系很复杂的时候,代码的编写和维护都会变得困难。 require.js的诞生,就是为了解决这两个问题: (1)实现js文件的异步加载,避免网页失去响应; (2)管理模块之间的依赖性,便于代码的编写和维护。 二、require.js的加载 使用require.js的第一步,是先去官方网站下载最新版本。 下载后

深入理解js——执行上下文

拈花ヽ惹草 提交于 2020-02-11 05:14:42
什么是“执行上下文”?暂且不下定义,先看一段代码: 第一句报错,a未定义,很正常。第二句、第三句输出都是undefined,说明浏览器在执行console.log(a)时,已经知道了a是undefined,但却不知道a是10(第三句中)。 在运行一段js代码之前,浏览器已经做了一些“准备工作”,其中就包括对变量的声明,而不是赋值。变量赋值是在赋值语句执行的时候进行的。可用下图模拟: 这是第一种情况。 第二种情况。 有js开发经验的朋友应该都知道,你无论在哪个位置获取this,都是有值的。至于this具体的取值情况,那就比较复杂了。与第一种情况不同的是:第一种情况只是对变量进行声明(并没有赋值),而此种情况直接给this赋值。这也是“准备工作”情况要做的事情之一。 第三种情况。 需要注意代码注释中的两个名词——“函数表达式”和“函数声明”。虽然两者都很常用,但是这两者在“准备工作”时,却是两种待遇。 在“准备工作”中, 对待函数表达式就像对待“ var a = 10 ”这样的变量一样,只是声明。而对待函数声明时,却把函数整个赋值了 。 好了,“准备工作”介绍完毕。 我们总结一下,在“准备工作”中完成了哪些工作: 变量、函数表达式——变量声明,默认赋值为undefined; this——赋值; 函数声明——赋值; 这三种数据的准备情况我们称之为“执行上下文”或者“执行上下文环境”。

博客园增加打赏功能

喜你入骨 提交于 2020-02-11 03:52:08
1.首先准备好自己微信和支付宝收款的二维码图片,注意,图片需要修改为bmp结尾的格式,如,alipay.bmp,wechat.bmp。 2.进入自己的博客园,然后进入 管理--->文件,在这里上传自己第1步中准备好的二维码图片。 3.复制下面的js代码 1 <script> 2 window.tctipConfig = { 3 staticPrefix: "https://static.tctip.com", 4 buttonImageId: 2, 5 buttonTip: "dashang", 6 list:{ 7 alipay: { qrimg: "https://files.cnblogs.com/files/clovershell/alipay.bmp"}, 8 weixin: { qrimg: "https://files.cnblogs.com/files/clovershell/wechat.bmp"}, 9 } 10 }; 11 </script> 12 <script src="https://static.tctip.com/js/tctip.min.js"></script> 4.修改js代码第7行和第8行,如下 7 alipay: {qrimg: "http://files.cnblogs.com/files/自己的博客地址名/支付宝图片的名子.bmp"},

博客园博客添加打赏功能技巧

蓝咒 提交于 2020-02-11 02:57:29
1.首先准备自己微信、支付宝收款的二维码图片,然后把图片需要修改为bmp结尾的格式,如:zfb.bmp,zfb.bmp。 2.进入自己的博客园,点击 管理--->文件,在这里上传准备好的zfb.bmp,zfb.bmp文件。 3.复制下面的js代码 <script> window.tctipConfig = { imagePrefix: "http://static.tctip.com", cssPrefix: "http://static.tctip.com", buttonImageId: 4, buttonTip: "dashang", list:{ alipay: {qrimg: "https://files.cnblogs.com/files/love57/zfb.bmp"}, weixin:{qrimg: "https://files.cnblogs.com/files/love57/wx.bmp"}, } }; </script> <script src="http://static.tctip.com/js/tctip.min.js"></script> 4.修改如下js代码代码即可: alipay: {qrimg: "https://files.cnblogs.com/files/love57/zfb.bmp"}, weixin:{qrimg: "https:/

js延迟加载的方式有哪些?

泪湿孤枕 提交于 2020-02-11 01:10:38
共有:defer和async、动态创建DOM方式(用得最多)、按需异步载入js defer属性 :(页面load后执行) HTML 4.01 为 <script> 标签定义了 defer 属性。 用途:表明脚本在执行时不会影响页面的构造。也就是说, 脚本会被延迟到整个页面都解析完毕之后再执行 。 在 <script> 元素中设置 defer 属性,等于告诉浏览器立即下载,但 延迟执行 。 <head> <script src="test1.js" defer="defer"></script> <script src="test2.js" defer="defer"></script> </head>    async 属性:(页面load前执行) HTML5 为 <script> 标签定义了 async 属性。与 defer 属性类似,都用于改变处理脚本的行为。同样,只适用于 外部脚本文件 。 目的:不让页面等待脚本下载和执行,从而异步加载页面其他内容。异步脚本一定会在页面 load 事件前执行。 不能保证脚本会按顺序执行。 <head> <script src="test1.js" async></script> <script src="test2.js" async></script> </head> <body>    动态创建Dom: //这些代码应被放置在</body

JS 预编译

强颜欢笑 提交于 2020-02-11 01:07:00
第一步: 语法分析 第二步: 预编译 第三步: 解释执行   1. 语义分析     语义分析是通篇执行的一个过程。不如有一篇代码,在执行时是解析一行执行一行,但在执行之前系统执行的第一步它会扫描一遍,看看有没有低级的语法错误,比如少些个符号,带个特殊字符之类的。此时通扫一遍,但是不执行,这个通篇扫面的过程叫语义分析,通篇扫面后就会预编译,然后解释一行执行一行,也就是解释执行。   2. 预编译      1. imply global :暗示全局变量:即任何变量,如果变量未经声名就赋值,自变量就为全局对象所有 a = 10; // 这种应该就是 imply global 了 console.log(a); // 打印 10 window.a; // 10 说明 window 属性上有 a var b = 20; // 声名了 b, 此时 window 也有了 b     2. 一切声名的全局变量,全是 window 的属性     3. 函数声名提升:如果写了一个函数声名,无论写在哪里,浏览器都会把这个函数提到逻辑的最前面。 函数声名整体提升      4. 变量 声名提升 所以系统只提升变量,而不是变量带着值一起提 var a = 123; // 上面的变量声名分为两步 var a; // 第一步,声名变量 a = 123; // 第二步, 变量赋值 console.log(a