你的位置:首页 > Java教程

[Java教程]5天揭秘js高级技术


一、基础杂记

1. document.write()

1 <script type="text/javascript">2   document.write('<h2>我爱你</h2>');3 </script>

document.write

2. 变量必须声明才能使用:

  使用var声明:局部变量;

  没有使用var声明:全局变量;

3. 数据类型:

  String:字符串  ‘’ ,“”;

  Number:数字;

  Boolean:布尔型;

  Undefined:未定义,只是声明了变量,但没有赋值;

  Null:空;

  Object:对象(数组,函数等);

 4. prompt:

1 var num=prompt("请输入:");//弹出输入对话框,并将输入值传递给num;2 alert(num);

prompt

 二、函数:

 1. 引用传递实例:

1 //按引用传递的对象函数实例:2 var p1=new Object();3 function display(obj){4   obj.name='lisi';5 }6 p1.name='zhangsan';7 display(p1);8 alert(p1.name);//结果:'lisi'

引用传递

 2. 匿名函数:

  1)函数名就是首地址;

 1   <script type="text/javascript"> 2     //匿名函数 3     var i=0; 4     function display(){ 5       alert('hello!'); 6     } 7     i=display();//变量i的值为函数的返回值,且立刻执行display这个函数,'()'有立刻执行的作用; 8     i=display;//变量i指向了这个函数的首地址; 9     i();10   </script>

   2)匿名函数演变:

1     var j=function display1(){//此时的display名称已经没有意义;2       alert('nihao!');3     }4     j();5     var k=function(){6       alert('nihao!');7     };8     k();

   3)自调用匿名函数:

 1 <script type="text/javascript"> 2 //没有任何变量指向这个函数的首地址; 3 //用()将函数括起来,相当于得到函数的收地址,后面的()相当于立即执行这个函数; 4 //自调用匿名函数也可以传递参数 5   (function(index){ 6     alert('hello,js:'+index); 7   })(10); 8  9 </script>10 //结果:10;  

   这种写法的好处:可以避免代码库中的函数重命名的问题,并且以上代码只会在运行时执行一次,一般用作初始化工作;

3. 全局变量和局部变量:

  在函数内部定义(用var定义,如果没有用var定义,也是全局的变量)的变量是局部变量,否则是全局变量;

 1   <script type="text/javascript"> 2     var i=1;//全局 3     j=2;//全局 4     function play(){ 5       var k=3;//局部 6       p=4;//全局 7     } 8     play(); 9     alert(p);//结果:410   </script>

   为什么没有var定义的变量就是全局的呢?

  是因为,在js中,如果某个变量没有var声明,会自动到上一层作用域中区找这个变量的声明语句,如果找到,就使用,如果没有找到,继续向上查找,一直查找到全局作用域为止,如果全局作用域中仍然没有这个变量的 声明语句,那么会自动在全局作用域进行声明,这个就是js中的作用域链;

4. 作用域链:内部作用域访问外部作用域;(外部作用域访问内部作用域:闭包)

 1   <script type="text/javascript"> 2     var i=1; 3     function fn1(){ 4       var i=10; 5       function fn2(){ 6         i=100; 7         function fn3(){ 8           i=1000; 9         }10         fn3();11       }12       fn2();13     }14     fn1();15     alert(i);//结果:116   </script>

 5. arugments的使用:

  在一个函数内部,可以使用arguments属性,它表示函数的形参列表,它是以数组形式体现的;

  如果定义时,参数个数不确定,可以通过arguments这个属性来保存所有实参;

 

 1 <script type="text/javascript"> 2     function display(){ 3       //没有定义形参,那么所有形参会自动存放到arguments这个属性数组中; 4       for(var i=0;i<arguments.length;i++){ 5         document.write(arguments[i]+','); 6       } 7  8     } 9     display('lisi','zhangsan','wangwu');//结果:'lisi','zhangsan','wangwu'10 </script>

五、js的执行过程

  js中的script是分段执行的;

  执行过程:

    1)读取第一个代码段

    2)编译:

      声明变量,声明函数,语法检查,语义检查,代码优化...

      var i=10;

      var i;

    3)执行

    4)读取第二个代码段

    5)编译

    6)执行

    .........

    结束

 1   <script type="text/javascript"> 2     //错误:i is not defined 3     alert(i); 4   </script> 5   <script type="text/javascript"> 6     //弹出:undefined 7     //原因:首先编译,这是已经声明了变量j,这时它是undefined,接下来是执行alert,此时,j还没有赋值,所以... 8     alert(j); 9     var j=10;10     //弹出:1011     //原因:此时j应经赋值;12     alert(j);13   </script>

六、js中的常见错误:

  编译错误和运行错误。

  1. 两种错误导致的结果:相同点

  (错误后面的js语句都不会有效果)

1   <script type="text/javascript">2     alert(n);3     alert("hello");4   </script>5   <script type="text/javascript">6     var n=10;7     alert(n;8     alert("hello");9   </script>

  2.不同点:

    运行错误代码段会弹出"hello1",因为执行完第2行,执行第3行时出错;

    编译错误代码段不会弹出"hello2",因为编译过程就已经出错,就不会执行改代码段了;

1   <script type="text/javascript">2     alert("hello1");3     alert(m);//运行错误4   </script>5   <script type="text/javascript">6     alert("hello2");7     var n=10;8     alert(n;//编译错误9   </script>

   总结:

    编译时,如果发生错误,那么当前代码段会停止执行,而执行后面代码段的内容;

    运行时,如果发生错误,但前面的代码已经执行完毕,所以不会影响前面的内容;

    无论是哪种错误,不会影响后面的代码段的执行;

 

 1   <script type="text/javascript"> 2     alert(i);//运行错误 3     var first=10; 4     function play(){ 5       alert("play"); 6     } 7   </script> 8   <script type="text/javascript"> 9     alert(first);10     play();11   </script>

  结果:弹出undefined,弹出play;

 1   <script type="text/javascript"> 2     var first=10; 3     function play(){ 4       alert("play"); 5     } 6     alert(i;  //编译错误 7  8   </script> 9   <script type="text/javascript">10     alert(first);11     play();12   </script>

  结果:什么也没弹出;

  总结:如果代码段中出现编译错误,那么该代码段中所有已经声明的全部无效;

  JS执行流程图:




去青海的旅游团价格去青海旅游必去景点去青海旅游要多少钱去青海旅游最佳路线去青海旅游最佳时间产于大渡河谷山岗坪的仙桃(图) 探秘巫山“喝水洞”:有块石头会“唱歌”(图) 甘孜州地方特产:樱桃(图) 笑傲江湖之小小三峡漂流攻略 杭州汽车站到浮盖山峡谷漂流坐车多长时间?杭州汽车站到浮盖山峡谷漂流怎么坐车? 江山到浮盖山峡谷漂流班车时刻表?江山到浮盖山峡谷漂流怎么坐车? 浙北峡谷漂流多大的小还可以玩?安吉浙北峡谷漂流有年龄限制吗? 月亮湾漂流几岁的孩子可以漂?临安月亮湾漂流儿童多大可以玩? 深厦高铁一天有几班车到达潮汕站?分别是什么时候? 深厦高铁到潮汕站价格是多少?贵吗? 厦深铁路时刻表是怎么样的? 厦深铁路票价是多少? 大圣马术俱乐部交通方便吗?金沙马术俱乐部有直达车吗? 这个秋天 来南太湖玩转极限运动(组图) 大圣马术俱乐部几点开门?金沙马术俱乐部游玩要多久? 大圣马术俱乐部项目介绍?金沙马术俱乐部有什么好玩的? AT28C256-15DM/8 Datasheet AT28C256-15DM/8 Datasheet AT28C25615DM/883 Datasheet AT28C25615DM/883 Datasheet AT28C256-15DM/883 SL815 Datasheet AT28C256-15DM/883 SL815 Datasheet 深圳中英街好玩吗 深圳中英街好玩吗 深圳中英街好玩吗 今天哪里地震 今天哪里地震 今天哪里地震 深圳东门步行街攻略 深圳东门步行街攻略 深圳东门步行街攻略