• 关于jQuery和JS的一些事


    1.jquery的$(function(){})和$(document).ready(function({}))的区别在哪?

    页面加载完成有两种事件
    一是ready,表示文档结构已经加载完成(不包含图片等非文字媒体文件)
    二是onload,指示页面包含图片等文件在内的所有元素都加载完成。
     
    以上提到的两种都属于ready这种加载方式,其实$(function(){})和$(document).ready(function({}))他们是相同的作用,或者还可以写成另一种方式,$().ready(function()),综上,提到的这些个方法都是Dom Ready,他的作用或者意义就是:在DOM加载完成后就可以可以对DOM进行操作。
    一般情况先一个页面响应加载的顺序是:域名解析-加载html-加载js和css-加载图片等其他信息。
    那么Dom Ready应该在“加载js和css”和“加载图片等其他信息”之间,就可以操作Dom了。
     
    需要注意的是如果以上提到的这两种方法同时存在的话,$(document).ready(function({}))先被执行,而$(function(){})后被执行,$(function(){.....})();和和(function (){…} ());表示函数立即执行
    2.JS与Jquery的区别?
     
    (1)  jQuery的执行条件已说明,而JS的入口函数却是window.onload = function(){内部放js},。等到所有内容,以及我们的外部图片之类的文件加载完了之后,才会去执行。只能写一个入口函数。
    而jQuery是在 html所有标签都加载之后,就回去执行。可以写多个入口函数
    3.JS与Jquery的执行顺序
     
     (1)JavaScript中的代码块是指由<Script>标签分割的代码块,代码块的独立性和分享性,一个报错不会影响另外一个执行.同时一个可以调用另外一个里面的变量
     (2)
    <script>
    function Fn(){
        //声明式函数
    }
    var Fn = function(){
        //赋值式函数
    }
    </script>
    

     区别:在js预编译时期,声明式函数会先被提取出来执行,然后再按顺序执行js代码。

       (3)预编译期js会对本地代码块中所有声明的变量和函数进行处理,需要注意的是这里处理的函数只是声明式函数,而且对于所有的变量只进行了声明,并未进行初始化和赋值。

    <script>
    Fn();   //执行结果 :声明式函数二 。如果声明了两个同名函数,则后面的函数会覆盖前的函数
    //函数一
    function Fn(){
        console.log("声明式函数一");
    }
    //函数二
    function Fn(){
        console.log("声明式函数二");
    }
    </script>
    
     
    <script>
    Fns();  //执行结果:声明式函数 。 可以看出声明式函数在预编译阶段被执行,而赋值式函数并没有在预编译阶段被执行
    //声明式函数
    function Fns(){
        console.log("声明式函数");
    }
    //赋值式函数
    var Fns = function(){
        console.log("赋值式函数");
    }
    Fns();  //执行结果:赋值式函数 。 可以看出在执行阶段赋值式函数被执行,并覆盖了同名的声明式函数
    </script>
    
    <script>
    console.log(str_1);     //执行结果:undefined 。 可以看出函数预编译阶段声明了str_1这个变量,但是并没有为他赋值。
    var str_1 = "Hello JavaScript";
    </script>
    

    下面还有一个例子:

    <script>
    Fn_1();     //执行结果:报错 Fn_1 is not defined 。 没有定义这个函数
    </script>
    <script>
    function Fn_1(){
        console.log("这是在代码块二中定义的函数");
    }
    </script>
    

     执行结果出错的原因是这样的,最上面的代码块里面并没有定义任何的变量和函数,预编译只预编译到这个代码块中声明的变量和函数,然后开始执行这个代码块。而对于后面还未加载的代码块,是没有办法预处理的,这也是边编译变处理的核心所在。

    而根据HTML文档的加载顺序,需要在页面元素渲染前加载的文件应该放在<body>元素的前面,需要在页面渲染完成后加载的文件放在</body>元素的后面,body标签的onload事件是最后执行的。

    (4)href="javascript:void(0);" 和 href="javascript:;" 相当于死链接,默认阻止,不进行动作。两者效果相当。但建议使用void(0)。只使用分号可能会影响before、after等操作。另 href 和 click 是有优先级的,所以有时候我们会写 <a href="javascript:void(0);" onclick=function() >。onclick 会先于 href 执行。
     
    (5)onclick事件中onclick(this),this永远指向所在函数的拥有者.onchange 在属性值改变时还必须使得当前元素失去焦点(onblur)才可以激活该事件
     
    (6)JS代码封装成一个方法,参考博客:https://blog.csdn.net/AlbenXie/article/details/70213466?locationNum=12&fps=1
     
    封装的一个例子:
    $(function() {
    	fillArea("0", "#province");
    	
    	$("#province").change(function() {
    		var ids = $(this).val();
    		fillArea(ids, "#city");
    	});
    	
    	$("#city").change(function() {
    		var ids = $(this).val();
    		fillArea(ids, "#area");
    	});
    });
    
    function fillArea(parentids, tagid) {
    	$.ajax({
    		type:"post",
    		url:"DistrictServlet",
    		data:{
    			parentids:parentids
    		},
    		dataType:"json",
    		success:function(data) {
    			if(data.success) {
    				$(tagid).empty();
    				for (var i = 0; i < data.result.length; i++) {
    					$(tagid).append("<option value='"
    							+data.result[i].ids+"'>"
    							+data.result[i].dname+"</option>");
    				}
    			} else {
    				alert(data.result);
    			}
    		},
    		error:function() {
    			
    		}
    	});
    }
    
     
  • 相关阅读:
    Mysql之修改mysql的视图定义者
    JQ对页面中某个DIV的大小变化进行监听拓展
    php网站性能优化
    nginx媒体服务器搭建
    windows配置多用户远程登录
    Tunnel Warfare HDU 1540
    好迷茫
    nginx部署vue前端项目实操(node安装,及安装vuecli/vue脚手架)
    .NET 基础
    docker 安装gitlab及配置cicd
  • 原文地址:https://www.cnblogs.com/zuo72/p/8974057.html
Copyright © 2020-2023  润新知