zoukankan      html  css  js  c++  java
  • 关于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() {
    			
    		}
    	});
    }
    
     
  • 相关阅读:
    FZU 2150 Fire Game
    POJ 3414 Pots
    POJ 3087 Shuffle'm Up
    POJ 3126 Prime Path
    POJ 1426 Find The Multiple
    POJ 3278 Catch That Cow
    字符数组
    HDU 1238 Substing
    欧几里德和扩展欧几里德详解 以及例题CodeForces 7C
    Codeforces 591B Rebranding
  • 原文地址:https://www.cnblogs.com/zuo72/p/8974057.html
Copyright © 2011-2022 走看看