Script标签里的defer属性,你知多少?

先看下面三段代码,写出你认为的输出结果?

<button id="myButton" onclick="alert('ok')">test</button><script>
$('myButton').click();
</script>



<script defer>
$('myButton').click();
</script>
<button id="myButton" onclick="alert('ok')">test</button>



<script>
$('myButton').click();
</script>
<button id="myButton" onclick="alert('ok')">test</button>

你一定对第二种很感兴趣,在第二段代码中,script标签的加载顺序跑在了它下面的button后面,这里要讲解script标签中的defer属性。

先摘录一段貌似官方的说法:

[color=orange]如果是编写脚本的时候加入defer属性,那么浏览器在下载脚本的时候就不必立即对其进行处理,而是继续对页面进行下载和解析,这样会提高浏览器下载的性能。[/color]

其实我们一般的写法中也有defer属性的,只不过它的默认值是false,比如

<script src="aaa.js"></script>

它等价于

<script src="aaa.js" defer=false></script>

我们可以显示的定义defer

<script src="aaa.js" defer></script>

或者是

<script src="aaa.js" defer=true></script>

当然了,好处就是那个官方的说法,浏览器不会立即对其进行处理,这样的好处是提高载入代码的性能,不过用defer有几点需要注意的

最后请注意两点:
1、不要在defer型的脚本程序段中调用document.write命令,因为document.write将产生直接输出效果。

2、而且,不要在defer型脚本程序段中包括任何立即执行脚本要使用的全局变量或者函数。
加上defer等于在页面完全在入后再执行,相当于 window.onload,但应用上比window.onload更灵活! 下面举个defer的实际应用,通常我们说eval是邪恶的,eval is evil,那么有了这个defer属性,我们就可以打造属于自己eval方法

var eval = function() {
var h = document.getElementsByTagName('HEAD').item(0);
var s = document.createElement( "script" );
s.language = "javascript";
s.type = "text/javascript";
[color=red]s.defer = true;[/color]


s.text = this;
h.appendChild( s );
};


具体参见[url]http://pldream.com/b/?post=63[/url]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值