JavaScript函数

JavaScript函数

一:函数

封装可以重复使用的代码

使用场合:1主动调用.2事件触发.

和java一样JavaScript有编译的过程,因此不必像python那样必须先定义才能执行,只不过编译对变量有点特殊.

<script type="text/javascript">
    // 函数定义
    function fnAlert(){
        alert('hello!');
    }
    // 函数执行         可以先执行,后定义
    fnAlert();
</script>

详解

1:编译阶段,就算你把函数定义写在后面,编译阶段会把函数定义提前.

特殊的就是变量的声明,也会被提前,不会被赋值,用undefined赋值.

2:执行阶段,函数就没什么了,在执行阶段,只有遇到变量赋值语句才会把值替换undefined,否则你在变量赋值前调用都是undefined

<script type="text/javascript">    
    fnAlert();       // 弹出 hello!
    alert(iNum);  // 弹出 undefined
    function fnAlert(){
        alert('hello!');
    }
    var iNum = 123;
alert(iNum) //弹出123
</script>

二:匿名函数

定义的函数可以不给名称,这个叫做匿名函数,可以将匿名函数直接赋值给元素绑定的事件来完成匿名函数的调用。

<script type="text/javascript">

window.onload = function(){
    var oBtn = document.getElementById('btn1');
    /*
    oBtn.onclick = myalert;
    function myalert(){
        alert('ok!');
    }
    */
    // 直接将匿名函数赋值给绑定的事件

    oBtn.onclick = function (){
        alert('ok!');
    }
}

</script>

匿名函数往往是前面用一个变量指向,变成一个函数引用.使用时直接引用().

函数的形参:函数可以不用任何形参来接收实参,因为默认有个arguments接收所有的实参,放到一个伪数组里面,之所以叫伪数组是因为,它有索引和长度,但是不能调用数组的方法.

三:封闭函数

封闭函数是javascript中匿名函数的另外一种写法,创建一个一开始就执行而不用命名的函数。

(function myalert(){
    alert('hello!');
})();

这个更极端,定义完就执行,没有函数引用,说明只能调用一次

封闭函数可以创造一个独立的空间,在封闭函数内定义的变量和函数不会影响外部同名的函数和变量,可以避免命名冲突,在页面上引入多个js文件时,用这种方式添加js文件比较安全,比如:

var iNum01 = 12;
function myalert(){
    alert('hello!');
}
(function(){
    var iNum01 = 24;
    function myalert(){
        alert('hello!world');
    }
    alert(iNum01);
    myalert()
})()
alert(iNum01);
myalert();

四:事件

js中用事件函数来处理不用的时间.

三步走:

1.找到事件源,找到标签对象

2.设置事件类型,例如点击事件,鼠标移动事件等

3.编写事件驱动.事件驱动就是里面的回调函数,也可以直接用写好的函数.

在html行间调用的事件可以提取到javascript中调用,从而做到结构与行为分离。

五:定时器

定时器在javascript中的作用
1、制作动画
2、异步操作
3、函数缓冲与节流

定时器类型及语法  

/*
    定时器:都是回调函数
    setTimeout(2000,fn)  开启只执行一次的定时器,2秒之后回调fn函数. 调完就结束.
    clearTimeout 关闭只执行一次的定时器,相当于垃圾回收机制
    setInterval(time,fn)  反复执行的定时器,每隔几面就回调一次fn.只要不停一直开着
    clearInterval 关闭反复执行的定时器,相当于垃圾回收机制
*/ var time1 = setTimeout(myalert,2000); var time2 = setInterval(myalert,2000); /* clearTimeout(time1); clearInterval(time2); */ function myalert(){ alert('ok!'); }
<!--行间事件调用函数   -->
<script type="text/javascript">        
    function fnAlert(){
        alert('ok!');
    }
</script>
......
<input type="button" name="" value="弹出" onclick="fnAlert()">

<!-- 提取行间事件 -->
<script type="text/javascript">

window.onload = function(){
    var oBtn = document.getElementById('btn1');
    oBtn.onclick = fnAlert;
    function fnAlert(){
        alert('ok!');
    }
}    
</script>
......
<input type="button" name="" value="弹出" id="btn1">
View Code

虽然有这样的使用方法,但是别用,而是用jQuery的方式来替代.存在有意义,但是不一定合理,jQuery的链式调用更加简洁.

看十遍不如自己写一遍!巩固基础,纵横开拓!
原文地址:https://www.cnblogs.com/gyxpy/p/11664744.html