本来以为这俩都是同一个效果,所以把jQuery的全都换成原生的了,大部分代码都没问题,只是有一个功能报错了,所以来问问这2段代码的区别在哪里?
(function(){
代码。。。
})();
$(document).ready(function(){
代码。。。
});
这2个的区别在哪里?为什么有的代码运行正常,有的就不行了?
如果想用原生的,应该怎么写?
本来以为这俩都是同一个效果,所以把jQuery的全都换成原生的了,大部分代码都没问题,只是有一个功能报错了,所以来问问这2段代码的区别在哪里?
(function(){
代码。。。
})();
$(document).ready(function(){
代码。。。
});
这2个的区别在哪里?为什么有的代码运行正常,有的就不行了?
如果想用原生的,应该怎么写?
老版jQ的ready标准写法是$(document).ready(function(){})
这样(还有几种其实大同小异),简写(jQ包装)是$(function(){})
;到3.0+以后,标准写法就是$(function(){})
(当然原来的写法也兼容),除此以外还加了一种写法,即:
$.when( $.ready).then(function(){})
或者
$.when( $.ready).done(function(){})
</body>
之前的话,其实加不加也无所谓。。(function(){
代码。。。
})();
是立即执行函数,可以保证里面的变量不会被外界污染
$(document).ready(function(){
代码。。。
});
等同于
$(function(){
代码。。。
})
是等待文档加载完成之后执行
一般是script
写在页面开头才需要用这些方式
如果用原生来替换的话,一般是用
window.onload = function(){
代码。。。
}
jq
封装的比这个更为复杂,但是基本上是这个意思,表示页面加载完成后执行里面的js代码
还可以通过把js
放在body
后面,因为html
是从上至下执行的,也可以达到相同的功能
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div></div>
</body>
<script>
(function(){
//这里可以获取到上面的div
//如果script标签是放在页面开头部分就获取不到,要通过window.onload才行
//代码。。。
})();
</scipt>
</html>
1.(function(){
代码。。。
})();
是立即执行函数,不需要调用就能自执行,可以看作是普通的代码块。然而,普通的函数都是需要用函数名来调用才执行的,正常是不会自己执行的。
2.$(document).ready(function(){
代码。。。
});
是jq的函数,意思是文档加载完毕后在进行执行,通常用jq的话,可以把逻辑代码写到这个函数里边去。
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
1是匿名函数立即执行
2是domcontentloaded之后触发的