博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript之函数
阅读量:6813 次
发布时间:2019-06-26

本文共 2710 字,大约阅读时间需要 9 分钟。

hot3.png

      玩js自然要和函数打交到。函数嘛简单来说就是给代码分个块,方便调用、信息隐藏和代码复用,还可以用于指定对象的行为。另外函数还可以玩出很多花样来。。。

     JavaScript 使用关键字 function定义函数。

    定义一个函数:

//函数声明//这种定义函数的好处是可以在当前作用域内任何位置调用,因为变量的声明和函数的声明都会被提升到当前作用域前面去执行。function $id(id,fa){	fa=fa || document;	return document.getElementById(id);}//函数表达式//这种方式其实就是定义了一个匿名函数(函数没有名称),然后把这个函数赋值给了一个变量,通常通过变量名来调用。//这种方式只能在赋值给变量之后才能通过变量名调用。这就和我们平时声明变量和给变量赋值一个道理。var $id=function(id,fa){	fa=fa || document;	return document.getElementById(id);};//构造函数//这种方式我们一般没怎么用,如果要用这种方式,我们可以使用函数表达式代替var $id=new Function('id','fa','fa=fa || document;return document.getElementById(id);');

    函数的参数:

/*如果是Java语言,方法规定的参数是多少,就必须传多少,如果参数不一样,需要用到方法重载。但是js里面是没有方法重载的。我们可以给函数传递任意多个参数,前提是你确定传这些参数你的函数都能正确处理。而且我们在函数内获取传递进来的参数也可以通过一个arguments的对象来获取到传递进来的参数,arguments对象不能显式创建,arguments对象只有函数开始时才可用。函数的 arguments 对象并不是一个数组,访问单个参数的方式与访问数组元素的方式相同。索引 n 实际上是 arguments 对象的 0…n 属性的其中一个参数。除了参数意外,arguments还有一个callee属性,callee属性,返回正被执行的 Function 对象,也就是所指定的 Function 对象的正文。callee 属性是 arguments 对象的一个成员,仅当相关函数正在执行时才可用。callee 属性的初始值就是正被执行的 Function 对象,这允许匿名的递归函数。*/function calleeTest(){	console.log(arguments[0]);	arguments[0] +=1;	if(arguments[0]<10){		arguments.callee(arguments[0]);	}}calleeTest(1);//1;2;3;4;5;6;7;8;9

    函数的调用:

//函数名加()就可以调用函数,这也是最常用的调用方式,()里面可以传我们需要的参数,如果传的个数比需要的少,//那么方法里面多的参数就是undefined;如果传的参数数量比定义函数时规定的参数多,//那么可以在函数内通过arguments访问到多余的参数。$id('swfsocketdiv');//在普通的函数调用方式中,函数的调用上下文(this的值),//为全局对象(非严格模式)或者undefined(严格模式)。function test(){        console.log(this);	function m(){		console.log(this);	}	m();}test();//Window;Window;//如果当前函数是一个匿名函数,还可以用自调用的方式调用,(function(){        console.log(this);})()//返回:Window对象,这种方式其实也算是普通的调用方式吧,只是看起来似乎不一样//函数定义作为对象的属性,称之为对象方法。作为方法调用中,//this指向当前对象。利用这一特性,我们可以在方法不需要明确的返回值时,直接返回this,从而实现"方法链"。//函数内部如果还有函数,嵌套函数不会继承外层函数的thisvar Selector={	test:function(id,fa){		console.log(this);                function m(){		        console.log(this);	        }	        m();	}}Selector.test();//Object { test: Selector.test() };Window;//函数如果用于创建新的对象,称之为对象的构造函数。function Student(name){	this.sname=name;	console.log(this);}//创建一个对象studentvar student=new Student('ly');//Object { sname: "ly" }//创建一个对象student2var student2=new Student('lyong');//Object { sname: "lyong" }//call,apply调用,如果某个对象有一个方法,而我在另一个对象中需要用到这么一个方法,//但是我又不想在另一个对象中再重复一次这个方法,那么这时就可以使用call或者apply切换函数所处的上下文环境function callMe(cname){	this.cname=cname;}var cm=new callMe('testname');Student.call(cm);//Object { cname: "testname", sname: undefined }Student.call(cm,'test');//Object { cname: "testname", sname: "test" }Student.apply(cm);//Object { cname: "testname", sname: undefined }Student.apply(cm,['test']);//Object { cname: "testname", sname: "test" }

    至于函数的返回值,如果有则返回,没有返回undefined,和其他语言差别不大。

 

转载于:https://my.oschina.net/liuyongfov/blog/787079

你可能感兴趣的文章
常用sql语句 DML语句
查看>>
python中序列类型
查看>>
C#数组的声明
查看>>
BZOJ 4129 树上带修莫队+线段树
查看>>
csv操作
查看>>
输出日期下一天
查看>>
html5 button 做超链接
查看>>
day18文件处理方式&生成器
查看>>
【POJ】1276 Cash Machine 【背包问题】
查看>>
android 股票数据通过日K获取周K的数据 算法 源码
查看>>
关于Linux运维的一些题目总结
查看>>
原生js实现查询天气的小应用
查看>>
分享两个必应壁纸接口,可用来获取高质量壁纸和故事
查看>>
tomcat启动脚本
查看>>
ASP.NET-FineUI开发实践-10
查看>>
小猪决定做一件尝试
查看>>
linux下jdk的安装:
查看>>
Ajax_ajax模板引擎 ---tmplate.js处理数据和标签拼接
查看>>
微信小程序-下拉松开弹不回去顶部留一段空白
查看>>
[摘录]感受弗兰克尔的故事
查看>>