defer

IE 和 Firefox 可以通过特定方法使 innerHTML 方法载入的 SCRIPT 标...

萝らか妹 提交于 2019-12-12 10:59:53
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> IE 和 Firefox 可以通过特定方法使 innerHTML 方法载入的 SCRIPT 标签中的 JavaScript 代码在页面加载后也可以执行 标准参考 根据 W3C HTML4.01 规范中的描述,SCRIPT 标签内的 "脚本" 只会在页面加载时执行一次,或者通过绑定事件实现在页面加载后脚本能够重复地执行。 defer 属性是 SCRIPT 元素的特有属性,这是一个布尔型属性,它通知用户端这段脚本中不会生产文档内容(如 "documnet.write" ),所以不必现在立即执行,一般的拥有 defer 属性的 SCRIPT 元素中的脚本会较晚的被执行。 关于 SCRIPT 元素的详细资料,请参考 HTML4.01 规范 18 中的内容。 关于 defer 属性的详细资料,请参考 HTML4.01 规范 18.2.1 中的内容。 问题描述 在 IE6 IE7 IE8 中,当使用 innerHTML 方法插入脚本时,SCRIPT 元素必须设置 defer 属性。 在 Firefox 中,先将被插入 HTML 代码的元素从其父元素中移除,然后使用 innerHTML 插入包含 SCRIPT 元素的代码,最后将这个元素恢复至原父元素中,则经过此操作后 SCRIPT 中的脚本可以被执行。 造成的影响

JavaScript 异步加载

痞子三分冷 提交于 2019-12-06 14:21:18
本文转载自:http://blog.csdn.net/m13666368773/article/details/7586106 一、同步加载与异步加载的形式 1. 同步加载 我们平时最常使用的就是这种同步加载形式: <script src="http://yourdomain.com/script.js"></script> 同步模式,又称阻塞模式,会阻止浏览器的后续处理,停止了后续的解析,因此停止了后续的文件加载(如图像)、渲染、代码执行。 js 之所以要同步执行,是因为 js 中可能有输出 document 内容、修改dom、重定向等行为,所以默认同步执行才是安全的。 以前的一般建议是把<script>放在页面末尾</body>之前,这样尽可能减少这种阻塞行为,而先让页面展示出来。 简单说:加载的网络 timeline 是瀑布模型,而异步加载的 timeline 是并发模型。 2. 常见异步加载(Script DOM Element) (function() { var s = document.createElement('script'); s.type = 'text/javascript'; s.async = true; s.src = 'http://yourdomain.com/script.js'; var x = document

Golang defer 使用时的坑

一笑奈何 提交于 2019-12-05 19:57:13
defer是golang语言中的关键字,用于资源的释放,会在函数返回之前进行调用。一般采用如下模式: f,err := os.Open(filename) if err != nil { panic(err) } defer f.Close() 如果有多个defer表达式,调用顺序类似于栈,越后面的defer表达式越先被调用。 不过如果对defer的了解不够深入,使用起来可能会踩到一些坑,尤其是跟带命名的返回参数一起使用时。在讲解defer的实现之前先看一看使用defer容易遇到的问题。 先来看看几个例子。例1: func f() (result int) { defer func() { result++ }() return 0 } 例2: func f() (r int) { t := 5 defer func() { t = t + 5 }() return t } 例3: func f() (r int) { defer func(r int) { r = r + 5 }(r) return 1 } 请读者先不要运行代码,在心里跑一遍结果,然后去验证。 例1的正确答案不是0,例2的正确答案不是10,如果例3的正确答案不是6...... defer是在return之前执行的。这个在 官方文档 中是明确说明了的。要使用defer时不踩坑,最重要的一点就是要明白,return

Swift专题讲解十八——异常处理

故事扮演 提交于 2019-12-01 01:23:22
Swift专题讲解十八——异常处理 一、异常的抛出与传递 代码的运行很多时候并不会完全按照程序员的设想进行,编写代码时进行可控的异常处理机制是十分必要的。通常,对于一个特定的操作,程序员可以定义一个继承自ErrorType的枚举来进行异常类型的描述,使用throw关键字来进行异常的抛出,示例代码如下: //定义一个自定义的错误类型 enum MyError:ErrorType { case DesTroyError case NormalError case SimpleError } //进行异常的抛出 throw MyError.NormalError 函数可以进行错误的传递,需要使用throws关键字来声明这个函数可能会抛出错误,如果不如此声明,则函数内部抛出的错误只能在函数内部解决,throws关键字标记的函数内部抛出的错误会被传递到调用函数的地方,开发者可以在调用函数的地方捕获到错误描述来做相应处理,示例如下: func MyFunc()throws -> Void { throw MyError.NormalError } 对于可能抛出异常的函数调用,开发者要么在调用函数的地方捕获处理这些异常,要么使用try关键字将异常继续抛出去,等待下一层捕获者处理。异常的处理后面会介绍,继续抛出异常示例如下: try MyFunc() 二、异常的处理 除了将错误继续向上抛出之外

Javascript 异步加载详解

十年热恋 提交于 2019-11-29 05:30:22
一、同步加载与异步加载的形式 1. 同步加载 我们平时最常使用的就是这种同步加载形式: < script src = " http://yourdomain.com/script.js " > < / script > 同步模式,又称阻塞模式,会阻止浏览器的后续处理,停止了后续的解析,因此停止了后续的文件加载(如图像)、渲染、代码执行。 js 之所以要同步执行,是因为 js 中可能有输出 document 内容、修改dom、重定向等行为,所以默认同步执行才是安全的。 以前的一般建议是把<script>放在页面末尾</body>之前,这样尽可能减少这种阻塞行为,而先让页面展示出来。 简单说:加载的网络 timeline 是瀑布模型,而异步加载的 timeline 是并发模型。 2. 常见异步加载(Script DOM Element) ( function ( ) { var s = document . createElement ( 'script' ) ; s . type = 'text/javascript' ; s . async = true ; s . src = 'http://yourdomain.com/script.js' ; var x = document . getElementsByTagName ( 'script' ) [ 0 ] ; x .

zg手册 之 twisted 开发(2)-- Deferreds 组件

荒凉一梦 提交于 2019-11-27 04:25:12
Deferreds 异步回调序列 Deferred 本质上是一个回调函数的集合,twisted 提供了对函数延迟调用的机制。 在 twisted 内部,使用 Deferred 对象管理回调序列。当异步请求结果返回时,使用 Deferred 对象调用回调序列中的函数。 这里通过几个例子来了解 Deferreds 使用的方式和工作的原理。 先看一个简单的例子 from twisted.internet import reactor, defer def getDummyData(x): """创建一个 Deferred 对象,并返回这个对象""" d = defer.Deferred() # 2 秒钟后执行 Deferred 回调函数序列,把 x * 3 作为参数传递给回调序列中的第一个函数 # reactor.callLater 是一个定时延迟调用的方法 reactor.callLater(2, d.callback, x * 3) return d def printData(result): """ 打印结果 """ print resultd = getDummyData(3) # 添加回调函数到回调函数序列中 d.addCallback(printData) # 4 秒钟后停止 reactor 循环(退出进程) reactor.callLater(4, reactor