@@ -635,84 +635,85 @@ HTML5?
635
635
636
636
- 写一个通用的事件侦听器函数。
637
637
638
- // event(事件)工具集,来源:github.com/markyun
639
- markyun.Event = {
640
- // 页面加载完成后
641
- readyEvent : function(fn) {
642
- if (fn==null) {
643
- fn=document;
644
- }
645
- var oldonload = window.onload;
646
- if (typeof window.onload != 'function') {
647
- window.onload = fn;
648
- } else {
649
- window.onload = function() {
650
- oldonload();
651
- fn();
652
- };
653
- }
654
- },
655
- // 视能力分别使用dom0||dom2||IE方式 来绑定事件
656
- // 参数: 操作的元素,事件名称 ,事件处理程序
657
- addEvent : function(element, type, handler) {
658
- if (element.addEventListener) {
659
- //事件类型、需要执行的函数、是否捕捉
660
- element.addEventListener(type, handler, false);
661
- } else if (element.attachEvent) {
662
- element.attachEvent('on' + type, function() {
663
- handler.call(element);
664
- });
665
- } else {
666
- element['on' + type] = handler;
667
- }
668
- },
669
- // 移除事件
670
- removeEvent : function(element, type, handler) {
671
- if (element.removeEnentListener) {
672
- element.removeEnentListener(type, handler, false);
673
- } else if (element.datachEvent) {
674
- element.detachEvent('on' + type, handler);
675
- } else {
676
- element['on' + type] = null;
677
- }
678
- },
679
- // 阻止事件 (主要是事件冒泡,因为IE不支持事件捕获)
680
- stopPropagation : function(ev) {
681
- if (ev.stopPropagation) {
682
- ev.stopPropagation();
683
- } else {
684
- ev.cancelBubble = true;
685
- }
686
- },
687
- // 取消事件的默认行为
688
- preventDefault : function(event) {
689
- if (event.preventDefault) {
690
- event.preventDefault();
691
- } else {
692
- event.returnValue = false;
693
- }
694
- },
695
- // 获取事件目标
696
- getTarget : function(event) {
697
- return event.target || event.srcElement;
698
- },
699
- // 获取event对象的引用,取到事件的所有信息,确保随时能使用event;
700
- getEvent : function(e) {
701
- var ev = e || window.event;
702
- if (!ev) {
703
- var c = this.getEvent.caller;
704
- while (c) {
705
- ev = c.arguments[0];
706
- if (ev && Event == ev.constructor) {
707
- break;
708
- }
709
- c = c.caller;
638
+ ```javascript
639
+ // event(事件)工具集,来源:github.com/markyun
640
+ markyun.Event = {
641
+ // 页面加载完成后
642
+ readyEvent : function(fn) {
643
+ if (fn==null) {
644
+ fn=document;
645
+ }
646
+ var oldonload = window.onload;
647
+ if (typeof window.onload != 'function') {
648
+ window.onload = fn;
649
+ } else {
650
+ window.onload = function() {
651
+ oldonload();
652
+ fn();
653
+ };
654
+ }
655
+ },
656
+ // 视能力分别使用dom0||dom2||IE方式 来绑定事件
657
+ // 参数: 操作的元素,事件名称 ,事件处理程序
658
+ addEvent : function(element, type, handler) {
659
+ if (element.addEventListener) {
660
+ //事件类型、需要执行的函数、是否捕捉
661
+ element.addEventListener(type, handler, false);
662
+ } else if (element.attachEvent) {
663
+ element.attachEvent('on' + type, function() {
664
+ handler.call(element);
665
+ });
666
+ } else {
667
+ element['on' + type] = handler;
668
+ }
669
+ },
670
+ // 移除事件
671
+ removeEvent : function(element, type, handler) {
672
+ if (element.removeEnentListener) {
673
+ element.removeEnentListener(type, handler, false);
674
+ } else if (element.datachEvent) {
675
+ element.detachEvent('on' + type, handler);
676
+ } else {
677
+ element['on' + type] = null;
678
+ }
679
+ },
680
+ // 阻止事件 (主要是事件冒泡,因为IE不支持事件捕获)
681
+ stopPropagation : function(ev) {
682
+ if (ev.stopPropagation) {
683
+ ev.stopPropagation();
684
+ } else {
685
+ ev.cancelBubble = true;
686
+ }
687
+ },
688
+ // 取消事件的默认行为
689
+ preventDefault : function(event) {
690
+ if (event.preventDefault) {
691
+ event.preventDefault();
692
+ } else {
693
+ event.returnValue = false;
694
+ }
695
+ },
696
+ // 获取事件目标
697
+ getTarget : function(event) {
698
+ return event.target || event.srcElement;
699
+ },
700
+ // 获取event对象的引用,取到事件的所有信息,确保随时能使用event;
701
+ getEvent : function(e) {
702
+ var ev = e || window.event;
703
+ if (!ev) {
704
+ var c = this.getEvent.caller;
705
+ while (c) {
706
+ ev = c.arguments[0];
707
+ if (ev && Event == ev.constructor) {
708
+ break;
710
709
}
710
+ c = c.caller;
711
711
}
712
- return ev;
713
712
}
714
- };
715
-
713
+ return ev;
714
+ }
715
+ };
716
+ ```
716
717
717
718
718
719
- Node.js的适用场景?
@@ -747,11 +748,13 @@ HTML5?
747
748
748
749
- 如何创建一个对象? (画出此对象的内存图)
749
750
750
- function Person(name, age) {
751
- this.name = name;
752
- this.age = age;
753
- this.sing = function() { alert(this.name) }
754
- }
751
+ ```javascript
752
+ function Person(name, age) {
753
+ this.name = name;
754
+ this.age = age;
755
+ this.sing = function() { alert(this.name) }
756
+ }
757
+ ```
755
758
756
759
757
760
- 谈谈This对象的理解。
@@ -771,6 +774,7 @@ HTML5?
771
774
772
775
- 什么是闭包(closure),为什么要用它?
773
776
777
+ ```javascript
774
778
就是一个函数里面又套有子函数,在这个函数里面声明的变量可以直接在子函数里面使用而不用再声明
775
779
执行say667()后,say667()闭包内部变量会存在,而闭包内部函数的内部变量不会存在.
776
780
使得Javascript的垃圾回收机制GC不会收回say667()所占用的资源,
@@ -786,7 +790,7 @@ HTML5?
786
790
787
791
var sayAlert = say667();
788
792
sayAlert()//执行结果应该弹出的667
789
-
793
+ ```
790
794
791
795
- "use strict";是什么意思 ? 使用它的好处和坏处分别是什么?
792
796
@@ -830,8 +834,7 @@ HTML5?
830
834
831
835
1. get是从服务器上获取数据,post是向服务器传送数据。
832
836
2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,
833
- 值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,
834
- 将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
837
+ 值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
835
838
3. 对于get方式,服务器端用Request.QueryString获取变量的值,
836
839
对于post方式,服务器端用Request.Form获取提交的数据。
837
840
4. get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。
@@ -854,24 +857,45 @@ HTML5?
854
857
855
858
- 模块化怎么做?
856
859
857
-
858
- [ 立即执行函数](http://benalman.com/news/2010/11/immediately-invoked-function-expression/),不暴露私有成员
859
-
860
- var module1 = (function(){
861
- var _count = 0;
862
- var m1 = function(){
863
- //...
864
- };
865
- var m2 = function(){
866
- //...
867
- };
868
- return {
869
- m1 : m1,
870
- m2 : m2
871
- };
872
- })();
873
-
860
+ ```javascript
861
+ [ 立即执行函数](http://benalman.com/news/2010/11/immediately-invoked-function-expression/),不暴露私有成员
862
+
863
+ var module1 = (function(){
864
+ var _count = 0;
865
+ var m1 = function(){
866
+ //...
867
+ };
868
+ var m2 = function(){
869
+ //...
870
+ };
871
+ return {
872
+ m1 : m1,
873
+ m2 : m2
874
+ };
875
+ })();
876
+ ```
874
877
- AMD(Modules/Asynchronous-Definition)、CMD(Common Module Definition)规范区别?
878
+ ```javascript
879
+ //AMD 依赖前置,提前执行依赖;
880
+ //api一个当多个用
881
+ //全局require和局部require都叫require
882
+
883
+ require(['/a','/b'],function(a,b){
884
+ a.dosomething();
885
+ b.dosomething();
886
+ });
887
+
888
+ //CMD 依赖就近,延迟执行依赖(as lazy as possiable);
889
+ //api严格区分,职责单一
890
+ //没有全局require,根据模块化系统的完备性 提供seajs.use 来实现模块化的启动
891
+
892
+ define(function(require,exports,modules){
893
+ var a=require('/a');
894
+ a.dosomething();
895
+ var b=require('/b');
896
+ b.dosomething();
897
+ });
898
+ ```
875
899
876
900
- 异步加载的方式有哪些?
877
901
@@ -924,17 +948,18 @@ HTML5?
924
948
925
949
jQuery中没有提供这个功能,所以你需要先编写两个jQuery的扩展:
926
950
927
- $.fn.stringifyArray = function(array) {
928
- return JSON.stringify(array)
929
- }
930
-
931
- $.fn.parseArray = function(array) {
932
- return JSON.parse(array)
933
- }
934
-
935
- 然后调用:
936
- $("").stringifyArray(array)
951
+ ```javascript
952
+ $.fn.stringifyArray = function(array) {
953
+ return JSON.stringify(array)
954
+ }
955
+
956
+ $.fn.parseArray = function(array) {
957
+ return JSON.parse(array)
958
+ }
937
959
960
+ 然后调用:
961
+ $("").stringifyArray(array)
962
+ ```
938
963
939
964
- 针对 jQuery 的优化方法?
940
965
0 commit comments