Javascript中定义函数的方式有多种,函数直接量就是其中一种。
如var fun = function(){},这里function如果不赋值给fun那么它就是一个匿名函数。好,看看匿名函数的如何被调用。
方式1,调用函数,得到返回值。强制运算符使函数调用执行(function(x,y){ alert(x+y); return x+y; }(3,4)); 方式2,调用函数,得到返回值。
强制函数直接量执行再返回一个引用,引用再去调用执行(function(x,y){ alert(x+y); return x+y;} )(3,4); 这种方式也是很多库爱用的调用方式,如jQuery,Mootools。 方式3,使用voidvoid function(x) { x = x-1; alert(x);}(9);。
将需要大量处理数据的过程分割成很多小段,然后通过JavaScript的计时器来分别执行,就可以防止浏览器假死。先看看怎么开始:
function ProcessArray(data,handler,callback){
ProcessArray()方法支持三个参数:
data:需要处理的数据
handler:处理每条数据的函数
callback:回调函数
然后定义一些变量:
var maxtime = 100;
var delay = 20;
var queue = data.concat();
maxtime表示每个处理进程的最大毫秒数。delay表示每个程序块之间的毫秒数。queue是源数据的复制,虽然不是在所有情景下都必要,但是我们是通过传递引用修改的,所以最好还是备份一下。
然后就可以使用setTimeout()方法来处理了:
setTimeout(function(){
var endtime = new Date() + maxtime;
do{
hanler(queue.shift());
}while(queue.length>0 && endtime > new Date());
首先,先计算endtime,这是程序处理的最大时间。do.while 循环用来处理每一个小块的数据,直到循环全部完成或者超时。
为什么使用do..while循环呢?
JavaScript支持while和do…while循环。不同之处在于do..while循环回至少执行一次。如果使用while循环,那么当开发者设置一个很小或者很低的endtime值的时候,那么处理就根本不会执行了。
最后,我们再决定是否需要处理其他的数据,如果需要,那么就再调用一次:
if (queue.length > 0) {
setTimeout(arguments.callee, delay);
}
else {
if (callback) callback();
}
}, delay);
}
这样回调函数会在每一个数据都处理结束的时候执行。我们可以通过ProcessArray()来测试一小组数据:
// process an individual data item
function Process(dataitem) {
console.log(dataitem);
}
// processing is complete
function Done() {
console.log("Done");
}
// test data
var data = [];
for (var i = 0; i < 500; i++) data[i] = i;
// process all items
ProcessArray(data, Process, Done);
这个方法在任何浏览器中都可以执行,不过HTML5提供了更好的办法,Rockux在以后的文章中会提到。
/*第一种方法,使用function语句,格式如下*/function fn(){ alert("这是使用function语句进行函数定义"); }fn();/*第二种方法,使用Function()构造函数克隆函数*/var F = new Function("a","b","alert(a+b)"); F(a,b);其实相当于如下代码:function F(a,b){ alert(a+b); }/*第三种方法,使用函数直接量*/var zhenn = function(){ alert("zhenn"); } zhenn();。
JS函数的定义方式比较灵活,它不同于其他的语言,每个函数都是作为一个对象被维护和运行的。
先看几种常用的定义方式:
function func1([参数]){
/*函数体*/
}
var func2=function([参数]){
/*函数体*/
};
var func3=function func4([参数]){
/*函数体*/
};
var func5=new Function();
上述第一种方式是最常用的方式,不用多说。
第二种是将一匿名函数赋给一个变量,调用方法:func2([函数]);
第三种是将func4赋给变量func3,调用方法:func3([函数]);或func4([函数]);
第四种是声明func5为一个对象。
再看看它们的区别:
function func(){
//函数体
}
//等价于
var func=function(){
//函数体
}
但同样是定义函数,在用法上有一定的区别。
<script>
//这样是正确的
func(1);
function func(a)
{
alert(a);
}
</script>
<script>
//这样是错误的,会提示func未定义,主要是在调用func之前没有定义
func(1);
var func = function(a)
{
alert(a);
}
//这样是正确的,在调用func之前有定义
var func = function(a)
{
alert(a);
}
func(1);
</script>
用同样的方法可以去理解第三种定义方式。
第四种定义方式也是需要声明对象后才可以引用。
1。
使用 window.alert() 弹出警告框。2。
使用 document.write() 方法将内容写到 HTML 文档中。3。
使用 innerHTML 写入到 HTML 元素。4。
使用 console.log() 写入到浏览器的控制台。JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。
它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。
将需要大量处理数据的过程分割成很多小段,然后通过JavaScript的计时器来分别执行,就可以防止浏览器假死。
先看看怎么开始:function ProcessArray(data,handler,callback){ ProcessArray()方法支持三个参数:data:需要处理的数据handler:处理每条数据的函数callback:回调函数 然后定义一些变量:var maxtime = 100;var delay = 20;var queue = data.concat(); maxtime表示每个处理进程的最大毫秒数。delay表示每个程序块之间的毫秒数。
queue是源数据的复制,虽然不是在所有情景下都必要,但是我们是通过传递引用修改的,所以最好还是备份一下。 然后就可以使用setTimeout()方法来处理了:setTimeout(function(){ var endtime = new Date() + maxtime; do{ hanler(queue.shift()); }while(queue.length>0 && endtime > new Date()); 首先,先计算endtime,这是程序处理的最大时间。
do.while 循环用来处理每一个小块的数据,直到循环全部完成或者超时。 为什么使用do..while循环呢? JavaScript支持while和do…while循环。
不同之处在于do..while循环回至少执行一次。如果使用while循环,那么当开发者设置一个很小或者很低的endtime值的时候,那么处理就根本不会执行了。
最后,我们再决定是否需要处理其他的数据,如果需要,那么就再调用一次:if (queue.length > 0) { setTimeout(arguments.callee, delay); } else { if (callback) callback(); } }, delay);} 这样回调函数会在每一个数据都处理结束的时候执行。我们可以通过ProcessArray()来测试一小组数据:// process an individual data itemfunction Process(dataitem) { console.log(dataitem);}// processing is completefunction Done() { console.log("Done");}// test datavar data = [];for (var i = 0; i < 500; i++) data[i] = i;// process all itemsProcessArray(data, Process, Done); 这个方法在任何浏览器中都可以执行,不过HTML5提供了更好的办法,Rockux在以后的文章中会提到。
定义函数的种方法1.
最基本的作为一个本本分分的函数声明使用。
复制代码代码如下:function func(){}或var func=function(){};2.
作为一个类构造器使用:复制代码代码如下:function class(){}
class.prototype={};
var item=new class();3.
作为闭包使用:复制代码代码如下:(function(){
//独立作用域})();4.
可以作为选择器使用:复制代码代码如下:var addEvent=new function(){
if(!-[1,]) return function(elem,type,func){attachEvent(elem,'on'+type,func);};
else return function(elem,type,func){addEventListener(elem,type,func,false);}
};//避免了重复判断5.
1. 函数调用
function test(){
alert(1);
}
2. 直接调用
test();
3. 指定内部this指针调用
(1)test.call(window);//执行test函数,将方法内部this指向window
(2)test.apply(window);///执行test函数,将方法内部this指向window
4. 通过事件调用
window.onload = test;//当页面载入时调用
window.onerror = test;当页面发生错误时调用
声明:本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
蜀ICP备2020033479号-4 Copyright © 2016 学习鸟. 页面生成时间:2.627秒