您的位置:首页 > Web前端 > JavaScript

JavaScript网页编程之------函数(一般函数、动态函数、匿名函数)

2016-07-06 00:12 537 查看
函数
1、一般函数
格式:
function 函数名(形式参数...)
{
执行语句;
return 返回值;
}
函数是多条执行语句的封装体,只有被调用才会被运行。
注意:调用有参数的函数,但没有给其传值,函数一样可以运行,或者调用没有参数的函数,给其传值,该函数也一样运行。
说的简单点:只要写了函数名后面跟了一对小括号,该函数就会运行。那么传递的参数呢?
其实,在函数中有一个参数数组对象(arguments),该对象将传递的参数都封装在一
个数组中。

例:

function demo(){<span style="font-family: 宋体;">//定义函数。</span>
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()的方式运行。



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


函数虽然定义时是声明成两个参数,但调用时却是可以传入任意个

<span style="font-weight: normal;"><span style="font-size:12px;">function show(x,y){
alert(x+","+y);
}
//show(23,22);//23,22
//show(23); //23,undefined
//show(); //undefined,undefined
//show(23,22,11);//23,22 后面的一个参数函数接收了但没有用</span></span>


每个函数中,存在一个 默认的数组arguments ,里面存储着本次调用时传入的所有实参

//函数的参数全部是js内部用一个arguments数组来接收与存放的---该对象是js内部隐含帮我们做的,我们可以访问到这个数组对象
function show2(x,y){
arguments[0]=1000;//可以把形参x的值改掉
document.write(x+","+y+"<br/>");
for(var i=0;i<arguments.length;i++){
<span style="white-space:pre">	</span>document.write(arguments[i]+",");
<span style="white-space:pre">	</span>}
}
show2(11,22,33,44);

//※综上,函数的技术细节:
//1, js中的函数是没有重载,只以函数名来识别的---其实函数名就是一个function对象的引用的名字
//2, js函数中有一个内部维护的arguments数组来接收与保存形参
技术细节:
1、js中函数没有重载,只以函数名来识别,函数名就是function对象的引用名

2、函数的参数全是js内部用一个arguments的数组来接收与存放的------该对象是js内部隐含帮我们做的,而且我们可以访问,也可以更改值

2、动态函数
通过Js的内置对象Function实现。
例:
<script type="text/javascript">
//把函数的形参用第1个参数传入,函数体中的代码用第2个参数传入----可以通过调用者动态传入函数体,因此非常灵活,该思想类似Java当中的类反射。
<span style="white-space:pre">	</span>var add = new Function("a,b","var s = a+b; return s; ");
//alert( add(12,11));
</script>
如同:
function demo(x,y){
alert(x+y);
}
demo(4,6);


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

3、 匿名函数

格式:function(){...}

例:

var demo = function(){...}
demo();


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

例:

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

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

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

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

函数定义与调用例子:

<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);
//alert("v="+v);

//数组排序
function sortArray(arr){
for(var x=0;x<arr.length-1;x++){
for( var y=x+1;y<arr.length;y++){
if(arr[x]>arr[y]){
swap(arr,x,y);
}
}
}
}
function swap(arr,x,y){
var temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}

//alert(arr);
//document.write(arr+"<br/>");
// sortArray(arr);
//alert(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( 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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: