JavaScript---网络编程(2)

上节,学完循环了~

现在学Javascript的函数和数组。

JavaScript语法

每一种语言都有自己的语法规则,JS语法与Java很像,所以学习起来比较容易。JS中也一样有变量,语句,函数,数组等常见语言组成元素。

1.一般函数

格式:

function  函数名(形式参数...)
{
    执行语句;
    return 返回值;
}

函数是多条执行语句的封装体,只有被调用才会被运行。

注意:调用有参数的函数,但没有给其传值,函数一样可以运行,或者调用没有参数的函数,给其传值,该函数也一样运行。

说的简单点:只要写了函数名后面跟了一对小括号,该函数就会运行。那么传递的参数呢?

其实,在函数中有一个参数数组对象(arguments),该对象将传递的参数都封装在一个数组中。

例:

function demo()//定义函数。
{
    alert(arguments.length);
}

demo(“hello”,123,true);//调用函数。

那么弹出的对话框结果是3,如果想得到所有的参数值,可以通过for循环遍历该数组。

for(var x=0; x<arguments.length; x++)
{
    alert(arguments[x]);
}

为了增强阅读性,最好按照规范,按定义好的形式参数传递实际参数。

函数在调用时的其他写法:

var show = demo();//show变量接收demo函数的返回值。

var show = demo;//这种写法是可以的,意为show和demo代表同一个函数。

//那么该函数也可以通过show()的方式运行。

代码演示1:

<html>
  <head>
    <title>javascript函数用法演示</title>
  </head>

  <body>
  <!--
      ※java中函数定义的格式:
    int sum(int a,int b){
      ....
      return s
    }

      ※js中函数定义的格式:
    function sum(a,b){
      ....
      return s
    }
    ▲▲js中的函数可以理解成一个function类型的对象
   -->

      <script type="text/javascript">
          //※浏览器对js代码是边解析边执行的
          //注意,函数的调用  应该在浏览器解析完 该函数的定义 之后进行
          //调用
          hello();//ie11中无效---因为浏览器解析该语句时,此函数还没有定义
      </script>

     <script type="text/javascript">
        //定义---无参函数
        function hello(){
            document.write("hello function!");
        }
        hello();//调用

        //定义---有参函数
        function add(a,b){
            var s = a+b;
            return s;
        }
        document.write("<br/>")
        document.write("s="+add(10,23));
     </script>

  </body>

</html>

360浏览器8.1 演示1结果:

代码演示2:

<html>
<head>
<title>javascript函数用法演示2---一点小细节</title>
</head>

<body>
    <script type="text/javascript">
        function show(x, y) {
            document.write(x + "," + y);
            document.write("<br/>");
        }
        show(23, 22);//23,22
        show(23); //23,undefined
        show(); //undefined,undefined
        show(23, 22, 11);//23,22 后面的一个参数函数接收了但没有用

        //函数的参数全部是js内部用一个arguments数组来接收与存放的---该对象是js内部隐含帮我们做的,我们可以访问到这个数组对象
        function show2(x, y) {
            arguments[0] = 1000;//可以把形参x的值改掉
            document.write(x + "," + y + "<br/>");
            for ( var i = 0; i < arguments.length; i++) {
                document.write(arguments[i] + ",");
            }
        }
        show2(11, 22, 33, 44);
        document.write("<br/>");
        //※综上,函数的技术细节:
        //1, js中的函数是没有重载,只以函数名来识别的---其实函数名就是一个function对象的引用的名字
        //2, js函数中有一个内部维护的arguments数组来接收与保存形参
    </script>

    <script type="text/javascript">
        function getValue() {
            document.write("aa");
            document.write("<br/>");
            return 100;
        }
        var v = getValue();
        document.write("v=" + v);
        document.write("<br/>");
        var v2 = getValue; //相当于getValue把引用值传给v2,因此v2也是一个“function对象”----getValue和v2都是引用变量
        document.write("v2=" + v2);//其实是输出v2对象的toString()
        document.write("<br/>");
        document.write("v2=" + v2()); //调用v2这个函数对象---调用函数
        document.write("<br/>");
    </script>

</body>

</html>

360浏览器8.1 演示2结果:

?动态函数

通过Js的内置对象Function实现。

例:

    var demo = new Function(“x,y”;”alert(x+y);”);
        demo(4,6);
        如同:
        function demo(x,y)
        {
            alert(x+y);
        }
        demo(4,6);

不同的是,动态函数,参数以及函数体都可以通过参数进行传递,可以动态指定。

匿名函数

格式 : function(){…}

例:

var demo = function(){…}

demo();

通常在定义事件属性的行为时较为常用。

例:

function test()
        {
            alert(“load ok”);
        }
        window.onload = test;

可以写成匿名函数的形式:

window.onload = function()
        {
            alert(“load ok”);
        }

匿名函数就是一种简写格式。

代码演示:

<html>
  <head>
    <title>javascript函数用法演示3---动态函数,匿名函数</title>
  </head>

  <body>

    <!--
      ※1※ 动态函数:使用的是js中内置的一个对象---- Function
       注意,小写的function是用来声明的,而大写的Function是用来new对象的

      //把下面的函数写成动态函数
        function add(a,b){
            var s = a+b;
            return s;
        }
     -->
    <script type="text/javascript">
       //把函数的形参用第1个参数传入,函数体中的代码用第2个参数传入----可以通过调用者动态传入函数体,因此非常灵活,该思想类似Java当中的类反射。
       var add = new Function("a,b","var s = a+b; return s; ");
       document.write( add(12,13) );
    </script>

    <!--
      ※2※ 匿名函数: 没有函数名的函数。这种方式我们以后在事件处理时会经常使用,类似Java中的匿名内部类经常用在事件监听器中一样
    -->
    <script type="text/javascript">
        var fun= function(a,b){
          return a+b;
        };
        document.write( fun(2,3) );

    </script>

    <!-- 用匿名函数给按钮添加事件绑定  -->
    <button id="btn1">一个按钮</button>
    <script type="text/javascript">
      btn1.onclick=function(){
          alert(‘aa‘);
      };
    </script>

  </body>

</html>

360浏览器8.1 演示结果:

弹窗:

5.数组

方便操作多元素的容器,可以对其中的元素进行编号。

特点:可以存任意元素,长度是可变的。

格式:

var arr = new Array();
    arr[0] = “hello”;
    arr[1] = 123;
    var arr = [‘hello’,123,true,”abc”];

通过遍历即可对数组进行基本操作。

for(var x=0; x<arr.length; x++)
    {
        alert(arr[x]);
    }

代码演示:

<html>
  <head>
    <title>javascript数组用法演示</title>
  </head>

  <body>
     <script type="text/javascript">
        //数组定义的方式1: 定义时直接赋初值
        var arr =[12,34,2,-3,90,12];
        document.write( typeof(arr) );
        //object
        document.write("<br/>");
        document.write("len:" + arr.length);
        document.write("<br/>");
        //遍历数组
        for(var x=0;x<arr.length;x++){
            document.write("arr["+x+"]="+ arr[x]+"&nbsp;");
        }
        document.write("<br/>");

        arr[0]=-10;
        arr[7]=66;//数组可以自动增长,且arr[6]没有赋值则是undefined

        document.write("len:"+arr.length+" 数组长度自动加长");
        document.write("<br/>");

        for(var x=0;x<arr.length;x++){
            document.write("arr["+x+"]="+ arr[x]+"&nbsp;");
        }
        document.write("<br/>");
        document.write("<hr/>");

        var arr2=[];

        document.write("arr2.length="+arr2.length);//0
        document.write("<br/>");

        arr2[1]=10;
        for(var x=0;x<arr2.length;x++){
            document.write("arr2["+x+"]="+ arr2[x]+"&nbsp;");
        }
        document.write("<br/>");

        //※※错误的声明方式--数组
        //int[] arr3 ={1,2,3};
        //var[] arr3 = [1,2,3];//错的,[]代表的是数组类型,而js中,所有数据类型只有一个var声明,不存在“var[]”这种类型

        document.write("同一个数组的元素可以是不同类型!!!<br/>");
        var arr4=[1,2,3,100];
        arr4[0]="abc";
        arr4[1]=true;
        for(var x=0;x<arr4.length;x++){
            document.write("arr4["+x+"]="+ arr4[x]+"&nbsp;");
        }
        document.write("<br/>");

        //※※综上,js数组的两个特点:
        //1,长度是可变的
        //2,元素的类型是任意的
     </script>

     <hr/>

    <script type="text/javascript">
       //数组定义的方式2: 使用js中的Array对象来定义
       var arr10 = new Array(); //※ 空参
       for(var x=0;x<arr10.length;x++){
        document.write("arr10["+x+"]="+ arr10[x]+"&nbsp;");
       }//什么都没有,因为长度是0
       document.write("arr10.length="+arr10.length);//0
       document.write("<br/>");

       var arr11 = new Array(8); //※ 一个参数,代表的是数组的长度
       arr11[2]=12;
       arr11[3]="abc";
       for(var x=0;x<arr11.length;x++){
           if(x==2||x==3){
                document.write("<font color=red >arr11["+x+"]="+ arr11[x]+"&nbsp;</font>");
           }else{
                document.write("arr11["+x+"]="+ arr11[x]+"&nbsp;");
           }
       }
       document.write("<br/>");

       var arr12 = new Array(10,11,12); //※ 多个参数,代表的是数组元素值
       arr12[5]="aaa";
       for(var x=0;x<arr12.length;x++){
        document.write("arr12["+x+"]="+ arr12[x]+"&nbsp;");
       }
       document.write("<br/>");

    </script>

  </body>

</html>

360浏览器8.1 演示结果:

接下来将函数和数组结合起来用用,写个排序和二分查找。

<html>
  <head>
    <title>javascript数组与函数练习</title>
  </head>

  <body>
  <script type="text/javascript">
    //写一个获取数组中元素最大值的函数
    //若有多个,返回第一个
    function getMax(arr){
        var max=0;//最大值的下标
        for(var x=1;x<arr.length;x++){
            if(arr[x]>arr[max]){
                max = x;
            }
        }
        return arr[max];
    }
    //调用
    var arr=[23,-3,45,0,-100,47,22];
    var v = getMax(arr);
    document.write("数组最大值的下标:"+v);
    document.write("<br/>");
    document.write("数组最大值:"+v);
    document.write("<br/>");

    //数组选择排序
    function sortArray(arr){
        for(var x=0;x<arr.length-1;x++){
            var min=x;
            for( var y=x+1;y<arr.length;y++){
                if(arr[min]>arr[y]){
                    min=y;
                }
            }
            if(min!=x){
                swap(arr,x,min);
            }
        }
    }
    function swap(arr,x,y){
        var temp = arr[x];
        arr[x] = arr[y];
        arr[y] = temp;
    }
    document.write("<hr/>");
    document.write("排序前:"+arr+"<br/>");
    sortArray(arr);
    document.write("排序后:"+arr+"<br/>");

    //我们的输出函数---把内容输出到页面且换行
    function println(str){
         document.write(str+"<br/>");
    }
    println(arr);
    sortArray(arr);
    println(arr);

    //到数组当中查找元素
    function searchElement(arr,key){
        for(var x=0;x<arr.length;x++){
            if(arr[x]==key){
                return x;
            }
        }
        return -1;
    }
    println( searchElement(arr,0) );
    println( searchElement(arr,123) );

  </script>

  <script type="text/javascript">
    //二分查找
    function binarySearch(arr,key){
        var max,min,mid;
        min=0;
        max=arr.length-1;
        while(min<=max){
            mid = (max+min)>>1;
            if(key>arr[mid]){//落在右边
                min = mid+1;
            }else if(key<arr[mid]){//落在左边
                max = mid-1;
            }else{
                return mid;
            }
        }
        return -1;
    }
    println("二分查找结果:");
    println( binarySearch(arr,0) );
    println( binarySearch(arr,123) );

    //数组反转
    function reverseArray(arr){
        for(var start=0,end=arr.length-1; start<end; start++,end--){
            swap(arr,start,end);
        }
    }
    reverseArray(arr);
    println("反转之后:"+arr);
  </script>

  </body>

</html>

360浏览器8.1 演示结果:

JS中的全局变量和局部变量解答:

代码演示:

<html>
  <head>
    <title>javascript中的全局变量与局部变量</title>
  </head>

  <body>
    <!--
            全局变量: js中,直接在脚本当中定义的变量全都是全局变量。
            局部变量: 在函数中定义的变量是局部的。
     -->

      <script type="text/javascript">
         function println(str){
             document.write(str+"<br/>");
         }
         var a=100;
         println("遍历输出0-9:");
         for(var x=0;x<10;x++){
             println("x="+x);
         }
      </script> 

      <script type="text/javascript">
         println("aaaa="+a);
         println("xxxx="+x);

         function aa(){
             var y=123;
             document.write("y="+y);
             return;
         }
         aa();
         document.write("<br/>");

         println("yyyy="+y);//不能访问函数内部定义的变量,因为它是局部的
      </script> 

      <!-- 一点小细节 -->
      <script type="text/javascript">
         var n=3;//全局变量n
         function abc(n){//局部变量n---形参是方法内部声明的局部变量,值由arguments[0]在使用n时临时赋给它的
             n=6;
         }
         abc(n);//把x传给方法abc,并在其中试图对该值进行更改--未遂!----本质上实参n是把值传给了函数中的arguments数组了
         println("n="+n);
      </script>

  </body>

</html>

360浏览器8.1 演示结果:

下一次就学习JS的对象了。毕竟JS是基于对象的语言。

时间: 2024-11-09 19:39:00

JavaScript---网络编程(2)的相关文章

物联网网络编程、Web编程综述

本文是基于嵌入式物联网研发工程师的视觉对网络编程和web编程进行阐述.对于专注J2EE后端服务开发的童鞋们来说,这篇文章可能稍显简单.但是网络编程和web编程对于绝大部分嵌入式物联网工程师来说是一块真空领域. 的确,物联网研发应该以团队协作分工的方式进行,所以有嵌入式设备端.网关.web前端.APP.后端开发等专属岗位.作为系统架构师,自然需要掌握各种岗位的关键技术.作为嵌入式工程师,掌握网络编程.web编程,能够极大地拓展自己的视野和架构思维,能够主动地对系统的各种协议和应用场景提出优化的见解

Android网络编程网上文章总结

关于网络编程,网上也有许多好的文章,这里我就选了几篇觉得不错的归纳到了一起,仅供参考 Android网络编程概述 首先,应该了解的几个问题: 1)Android平台网络相关API接口 a) java.net.*(标准Java接口) java.net.*提供与联网有关的类,包括流.数据包套接字(socket).Internet协议.常见Http处理等.比如:创建URL,以及URLConnection/HttpURLConnection对象.设置链接参数.链接到服务器.向服务器写数据.从服务器读取数

JavaScript异步编程设计快速响应的网络应用

JavaScript已然成为了多媒体.多任务.多内核网络世界中的一种单线程语言.其利用事件模型处理异步触发任务的行为成就了JavaScript作为开发语言的利器.如何深入理解和掌握JavaScript异步编程变得尤为重要!!!<JavaScript异步编程设计快速响应的网络应用>提供了一些方法和灵感. 一.深入理解JavaScript事件 1. 事件的调度 JavaScript事件处理器在线程空闲之前不会运行(空闲时运行). var start = new Date(); setTimeout

网络编程 --- URLConnection --- 读取服务器的数据 --- java

使用URLConnection类获取服务器的数据 抽象类URLConnection表示一个指向指定URL资源的活动连接,它是java协议处理器机制的一部分. URL对象的openConnection()方法就是调用了URLStreamHandler的openConnection()方法. 如有疑问请参考:JAVA网络编程[第三版], 如下图: 怎样获取服务器输出的数据呢?代码如下: import java.io.IOException; import java.io.InputStream; i

java进阶 ------ 基于URL高层次的网络编程

[本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020] 统一资源定位符URL URL(Uniform Resource Locator)表示Internet上某一资源的地址,通过URL我们可以访问internet上的各种网络资源,比如最常见的WWW,FTP站点. URL的组成: protocol://resourceName 协议名(protocol)指明获取资源所使用的传输协议,如http,ftp,gopher,file等,资

[C# 网络编程系列]专题四:自定义Web浏览器

转自:http://www.cnblogs.com/zhili/archive/2012/08/24/WebBrowser.html 前言: 前一个专题介绍了自定义的Web服务器,然而向Web服务器发出请求的正是本专题要介绍的Web浏览器,本专题通过简单自定义一个Web浏览器来简单介绍浏览器的工作原理,以及帮助一些初学者揭开浏览器这层神秘的面纱(以前总感觉这些应用感觉很深奥的,没想到自己也可以自定义一个浏览器出来),下面不啰嗦了,进入正题. 一.Web浏览器的介绍 Web浏览器是指可以显示Web

Node.js网络编程

Node.js为javascript语言提供了一个在服务端运行的平台,它以其事件驱动,非阻塞I/O机制使得它本身非常适合开发运行在在分布式设备上的I/O密集型应用,分布式应用要求Node.js必须对网络通信支持友好,事实上Node.js也提供了非常强大的网络通信功能,本文就主要探讨如何使用Node.js进行网络编程. 首先,网络编程的概念是"使用套接字来达到进程间通信的目的".通常情况下,我们要使用网络提供的功能,可以有以下几种方式: 1.使用应用软件提供的网络通信功能来获取网络服务,

Android网络编程 知识框架

http://blog.csdn.net/wolf09311/article/details/41012379 1)Android平台网络相关API接口 a) java.net.*(标准Java接口) java.net.* 提供与联网有关的类,包括流.数据包套接字(socket).Internet协议.常见Http处理等.比如:创建URL,以及 URLConnection/HttpURLConnection对象.设置链接参数.链接到服务器.向服务器写数据.从服务器读取数据等通信.这些在 Java

Android网络编程概述

Android网络编程概述 首先,应该了解的几个问题: 1)Android平台网络相关API接口 a) java.net.*(标准Java接口) java.net.*提供与联网有关的类,包括流.数据包套接字(socket).Internet协议.常见Http处理等.比如:创建URL,以及URLConnection/HttpURLConnection对象.设置链接参数.链接到服务器.向服务器写数据.从服务器读取数据等通信.这些在Java网络编程中均有涉及. b) Org.apache接口 对于大部

android开发笔记之网络编程—使用HTTP进行网络编程

上次我们讲到了使用URLConnection的网络编程,URLConnection已经可以非常方便地与指定站点交换信息,URLConnection下还有一个子类:HttpURLConnection. HttpURLConnection在URLConnection的基础上进行改进,增加了一些用于操作HTTP资源的便捷方法. setRequestMethod(String):设置发送请求的方法 getResponseCode():获取服务器的响应代码 getResponseMessage():获取服