`

【JavaScript从入门到精通】第三课

    博客分类:
  • JS
JS 
阅读更多

第三课 初探JavaScript魅力-03

 

函数传参

 

上节课的时候我们已经讲了什么是函数,实际上,函数在功能上就类似于css的class一样,将一段代码包裹起来使用。为了让函数的功能更加的丰富和实用,我们需要用到的就是函数传参。我们已经提过,JS将参数放在函数名后的圆括号内,而为了具体说明参数怎么使用,我们举一个小例子。

我们在HTML页面中放入一个有颜色的div块,并加入3个按钮,其目的是通过点击按钮来改变div块的颜色。通过前面两节课的学习,我们可以很轻松地写出下面的代码来实现这个功能:

<html> <head> <meta charset="utf-8"> <title>无标题文档</title> <style> #div1{ width:200px; height:200px; background:red; } </style> <script> function toGreen() { var oDiv=document.getElementById('div1'); oDiv.style.background='green'; } function toYellow() { var oDiv=document.getElementById('div1'); oDiv.style.background='yellow'; } function toBlack() { var oDiv=document.getElementById('div1'); oDiv.style.background='black'; } </script> </head> <body> <input type="button" value="变绿" onclick="toGreen();" /> <input type="button" value="变黄" onclick="toYellow();" /> <input type="button" value="变黑" onclick="toBlack();" /> <div id="div1"> </div> </body> </html>
 

效果如下:

 

可以看到,为了实现这一功能我们一共写了三个函数,作用分别是让div块变绿、变黄、变红。这三个函数的结构几乎一模一样:通过getElementById获取到div1并赋值给oDiv,然后修改其background属性,唯一的区别是具体的颜色值不同。所以,有没有办法将这三个函数进行合并呢?自然是有的,方法就是我们这节课要讲的函数传参。

这里,我们先将前面讲函数的定义和调用那个例子拿过来。

function show()       
{                       //定义
  alert("a");
}
show();            //调用

运行网页后会固定弹出内容为“a”的窗口。这样的功能是不是太简单了?如果我希望它弹出的内容是我给定的内容应该怎么做?答案便是使用参数。

参数的使用方法其实很简单,在这个例子里,我们在函数的()放入一个num,这个num类似于前面讲的变量,名字由编写者自定,并且函数定义的时候num自身的值是未知的。如何确定num的值呢?在调用函数的时候,在()内输入的值便是num的具体值。示例如下:

function show(num)       
{               
  alert(num);
}
show(12);   

结果如下:

 

运行程序后,弹出来的窗口值变为了12。我们修改show()里的值,运行结果也会发生相应的变化。于是,我们就可以称num为函数show()的参数。这个例子我们可以看出,函数参数扮演的是占位符的角色,在定义的时候参数仅仅是占据一个位置而没有具体的值,其值在函数调用时才被传入。

值得注意的是,对于一个函数来说,它的参数是可以有很多个的,传入多个参数时,我们用逗号将参数隔开:

function show(a,b)       
{               
  alert(a+b);
}
show(5,12);  

结果如下:

 

需要注意传入的值要和参数一一对应(a=5,b=12)。

现在我们就通过传参的方法将前面的代码进行合并。我们写一个统一的函数setColor,并传入一个color参数(用于决定将div修改为什么颜色),保留前面三个函数的主体部分,只将颜色具体的值修改为color,color具体的值则在button里调用setColor函数时再决定。 修改后的代码如下:

<html>
  <head>
    <meta charset="utf-8">
    <title>无标题文档</title>
    <style>
      #div1{
        width:200px;
        height:200px;
        background:red;
      }
    </style>
    <script>
      function setColor(color){
        var oDiv=document.getElementById('div1');
        oDiv.style.background=color;
      }
    </script>
  </head>
  <body>
    <input type="button" value="变绿" onclick="setColor('green');" />
    <input type="button" value="变黄" onclick="setColor('yellow');" />
    <input type="button" value="变黑" onclick="setColor('black');" />
    <div id="div1">
    </div>
  </body>
</html>

传参的具体内容就是这些,但关于传参,很多初学者都会有这样的疑惑:我们如何判断一个函数是否应该使用参数传递呢?一个比较简单的判断方法是,当我们的函数如果存在一部分内容在定义时无法确定下来,就有使用参数传递的必要。

 

改变Div的任意样式

 

刚才的程序里的函数setColor,其作用只能修改div的背景颜色。假设我们想通过一个函数,来改变一个div的各种样式,例如宽,高,边框等,又应该如何对我们的函数进行修改呢?

很明显,想修改Div的任意样式,有两处是无法确定的,一个是具体的样式名(name),一个是具体样式的值(value),因此我们需要两个参数。如果按照我们前面所讲,那么JS函数的写法应该如下:

functionsetStyle(name,value)
{
  var oDiv=document.getElementById('div1');
  oDiv.style.name=value;
}

实际上,尝试一下就会发现,这个函数是无法正常运行的。原因出在这种写法下,浏览器并不会认为oDiv.style.name中的name和参数中的name是同一个东西,而会认为这是一个叫“name”的样式,当然css中并没有名为“name”的样式,因此无法执行。

为了解决这个问题,我们必须了解第二种操作属性方法。第一种操作属性的方法就是我们已经学过的使用.字符连接,我们之前所有案例都是通过这种方法来操作属性。而第二种操作属性的方法,是通过['属性名']的方法来进行操作。具体的使用方法如下:

function setText()
{
  var oTxt=document.getElementById.('txt1');
  //第一种操作属性的方法
  oTxt.value='dsfasdfasdf';
  //第二种操作属性的方法
  oTxt['value']='dsfasdfasdf';
}

在这个小例子中,二者不存在任何区别。在平常的书写中,由于第一种比第二种更为简便,因此大多选用第一种写法。而第二种写法的好处是,[]内放置的是一个字符串(关于字符串的具体内容本课末会讲),而字符串可以通过变量来储存,也可以通过参数传递具体的值。因此,前一个案例里想通过参数改变样式名的目的便可以通过这种方法达成。 实现代码如下:

<html> <head> <meta charset="utf-8"> <title>无标题文档</title> <style> #div1{ width:200px; height:200px; background:red; } </style> <script> function setStyle(name, value) { var oDiv=document.getElementById('div1'); oDiv.style[name]=value; } </script> </head> <body> <input type="button" value="变宽" onclick="setStyle('width', '400px')" /> <input type="button" value="变高" onclick="setStyle('height', '400px')" /> <input type="button" value="变绿" onclick="setStyle('background', 'green')" /> <div id="div1"> </div> </body> </html>

效果如下:

 

这样,无论想改变div的什么属性,都可以通过传递参数来实现了。

顺便一提,在JS里,任何使用.字符的地方,都可以用[]代替,例如document.getElementById('div1')可以修改为document['getElementById']('div1'),oDiv.style.[name]可以修改为oDiv['style'][name],具体如何使用视实际情况而定。

 

字符串和变量——区别和关系

 

观察前面的代码,可以看到有很多使用""和''的地方,在JS里使用引号标注的就是字符串。变量和字符串之间有什么关联或者区别呢?

说到这里,再提及JS里面一个与变量相对的概念:字面量(常量)。对于字面量来说,其值是固定的,我们可以清楚地知道它是多少。数字,字符串都是字面量。相对来说,变量的具体值则是不确定的,如果单独看变量本身我们是无法确定其值为多少的。

对于变量和参数来说,使用它们是不需要加引号的,而字符串则必须加上引号。 对于下面一个例子:

alert(abc);

我们的本意是想将abc输出,但由于没有加引号,浏览器会认为abc是一个变量,又由于abc没有被定义过值,所以会出现abc没有被定义的报错。字符串和变量在我们以后的课程中会不断地应用到,大家慢慢就会熟悉他们之间的关系和区别。

分享到:
评论

相关推荐

    JavaScript从入门到精通(第2版)PPT.7z

    在“JavaScript从入门到精通(第2版)PPT”这套教学资料中,我们将深入探讨JavaScript的核心概念、语法特性以及实际应用。 1. **基础概念** - **变量与数据类型**:JavaScript支持基本数据类型(如字符串、数字、...

    JavaScript从入门到精通(第4版)(示例源码+习题答案).7z

    "JavaScript从入门到精通(第4版)"是一本旨在帮助初学者掌握这门语言的教材,通过详细的示例源码和习题答案,让学习者能够逐步深入理解JavaScript的核心概念和实际应用。 1. **基础语法**:JavaScript的基础包括...

    Html+Css+Javascript从入门到精通.pdf

    ### Html+Css+Javascript从入门到精通 #### Web开发基础教程概述 《Html+Css+Javascript从入门到精通》是一本全面介绍了Web前端开发技术的教程。本书旨在帮助读者掌握Web开发的基础知识,并通过实践逐步深入理解...

    JavaScript从入门到精通 所有例题程序

    "JavaScript从入门到精通 所有例题程序"是一个专门针对学习者设计的资源包,旨在帮助初学者通过实践掌握JavaScript的核心概念和技术。 这个资源包中的"sl"实例源程序包含了大量例题,涵盖了JavaScript的基础到进阶...

    JavaScript从入门到精通(第2版)( (美)Steve Suehring)中文pdf

    《JavaScript从入门到精通》分为三篇:第一篇为JavaScript语法基础,主要包括JavaScript简介、如何实现JavaScript、数据类型、变量和常量、运算符、语句和函数等内容;第二篇为JavaScript对象,主要包括对象、核心...

    javascript从入门到精通.rar

    1. "javascript从入门到精通.pdf":这很可能是一本详尽的JavaScript教程,涵盖了语言基础、数据类型、控制结构、函数、对象、数组、DOM操作、事件处理、AJAX以及现代JavaScript特性如ES6+的新特性等。通过阅读这本书...

    HTML、CSS、JavaScript网页制作从入门到精通 第三版

    第三版,扫描版PDF,不是试看版,也不是ppt转PDF,就是扫描版PDF,需要的自取《HTMLCSSJavaScript网页制作从入门到精通》共分为18章和4个附录,重点介绍使用HTML进行网页制作的方方面面,同时讲解了目前流行的Web...

    HTML5+CSS3+JavaScript网页制作从入门到精通054245【实例示例源程序】

    这个压缩包文件“HTML5+CSS3+JavaScript网页制作从入门到精通054245【实例示例源程序】”显然包含了丰富的学习资源,旨在帮助初学者快速掌握这三门技术,并通过实例进行实践。 HTML5(HyperText Markup Language 5...

    JavaScript从入门到精通(第2版)( (美)Steve Suehring)中文pdf扫描版-2

    本书《JavaScript从入门到精通(第2版)》由Steve Suehring撰写,专为想要深入理解并掌握JavaScript的初学者和进阶者设计。它涵盖了JavaScript的基础概念、语法特性以及高级应用,旨在帮助读者构建坚实的JavaScript...

    从入门到精通javascript全部代码

    "从入门到精通javascript全部代码"这个资源旨在帮助初学者逐步掌握JavaScript,并通过实际代码示例深入理解其核心概念。 首先,JavaScript的核心知识点包括变量、数据类型、控制结构(如条件语句和循环)、函数、...

    最完整的javascript从入门到精通教程

    资源名称:最完整的Javascript从入门到精通教程内容简介:Javascript是一种基于对象(Object)和事件驱动(Event Driven)并具有安全性能的脚本语言。使用它的目的是与 HTML超文本标记语言、Java 脚本语言...

    html5+css3从入门到精通

    本教程"html5+css3从入门到精通"针对前端新手,旨在帮助初学者快速掌握这两项核心技术。 HTML5(超文本标记语言第五版)是网页内容结构的标准,它引入了许多新的元素和属性,以更好地表达内容的语义。例如,`...

    PHP从入门到精通3 随书光盘

    《PHP从入门到精通3》是一本旨在帮助初学者快速掌握PHP编程技能的教程,随书光盘提供了丰富的学习资源,使读者能够结合理论与实践,深入理解PHP语言的核心概念和实际应用。以下是对该书及光盘内容的详细解析: 1. *...

    HTML5+CSS3从入门到精通.zip

    在JavaWeb前端开发中,熟练掌握这两项技术是至关重要的,因为它们可以帮助开发者创建交互性强、视觉效果丰富的网页,同时...通过阅读"HTML5+CSS3从入门到精通1.pdf"这份文档,你可以系统地学习并掌握这些关键知识点。

    HTML5+CSS3从入门到精通 源码和示例

    本书“HTML5+CSS3从入门到精通”由Terry Felke-Morris撰写,旨在帮助初学者和有经验的开发者深入理解和掌握这两种技术。 HTML5作为第五代超文本标记语言,其主要改进包括: 1. 新增语义化标签:如、、、等,提高了...

    javascript从入门到精通

    JavaScript是一种广泛应用于网页中的脚本编程语言,从标题“JavaScript从入门到精通”可以看出,本文档旨在为读者提供从基础到高级的JavaScript知识培训。下面将详细阐述各章中所涉及的知识点。 第1章 JavaScript...

Global site tag (gtag.js) - Google Analytics