【JS--基础--函数】--基本概念
来源:互联网 发布:加工中心编程网上工作 编辑:程序博客网 时间:2024/05/22 03:28
1.定义:
**通常:function fname(arg) {...}
**直接量法: var fvar=function(arg) {...} --无函数名
var fvar=function fname(arg) {...} ----有函数名(应用场景:调用自身的递归函数)
**对象法:var myFunction=new Function("a","b","return a+b"); ----js里函数即对象
直接量法为js表达式创建,而不是语句创建,所以更灵活了。尤其适用于那些只使用一次且无需命名的函数,但个人认为不指定fName创建一个无名函数,有的时候就没有任何意义。因为可以用表达式来代替,如下面的第2个例子。直接量法定义的例子如下:
f[0]=function(x) {...} //define and store it;invoke:f[0](5)a.sort(function(x,y) {return x+y;}) //define and pass it to anothervar b=(function(x){return x*x;})(10) //define and invoke
2.js里函数即对象
(1)函数对象和其他内部对象的关系
typeof返回“function”的对象都是函数对象。也称这样的对象为构造器(constructor)
alert(typeof(Function))); //构造器alert(typeof(new Function())); //构造器alert(typeof(Array)); //构造器alert(typeof(Object)); //构造器alert(typeof(new Array())); alert(typeof(new Date())); alert(typeof(new Object()));前面4条语句都会显示“function”,而后面3条语句则显示“object”,可见new一个function实际上是返回一个函数。这与其他的对象有很大的不同。其他的类型Array、Object等都会通过new操作符返回一个普通对象。管函数本身也是一个对象,但它与普通的对象还是有区别的,因为它同时也是对象构造器。
(2)运用
函数====参数
function func1(theFunc){ theFunc(); } function func2(){ alert("ok"); } func1(func2);
函数====数据(变量的值、对象属性的值、数组的元素.....)
function fs(x) {...}var c=fs;var d=c(4);var o=new Object();o.name=function(x) {return x*x;}o.name(16);var a=new Array(3);a[0]=function(x) {return x*x;}a[1]=20;a[2]=a[0](a[1])
函数====方法( 调用方法的对象成为关键字this值)
事实上,将函数作为参数传递,或者是将函数赋值给其他变量是所有事件机制的基础
3.函数参数
(1)隐含参数对象:arguments
当进行函数调用时,除了指定的参数外,还创建一个隐含的对象——arguments。arguments是一个类似数组但不是数组的对象,说它类似是因为它具有数组一样的访问性质,可以用arguments[index]这样的语法取值,拥有数组长度属性length。arguments对象存储的是实际传递给函数的参数,而不局限于函数声明所定义的参数列表。
***arguments引用获得参数
function func(a,b){ alert(a); alert(b); for(var i=0;i<arguments.length;i++){ alert(arguments[i]); } } func(1,2,3);代码运行时会依次显示:1,2,1,2,3。因此,在定义函数的时候,即使不指定参数列表,仍然可以通过arguments引用到所获得的参数,这给编程带来了很大的灵活性
***arguments对象的属性callee,它表示对函数对象本身的引用,这有利于实现无名函数的递归或者保证函数的封装性
详分析见 http://blog.csdn.net/beiji_nanji/article/details/7585156
***arguments对象的属性length,实参的长度(函数的属性length,表示函数定义时的形参个数)
(2)函数可选参数
格式: function fname(arg1,/* optional */ a)
(3) 可变长度参数列表
格式:
function fname(/* ... */) 或 function fname()
参数用arguments来取
function fname(/* ... */) {return arguments.length}fname(1,2,3) //3function fname1() {return arguments.length}fname1(1,2,3) //3
(4) 对象作为函数参数
略
4.函数的属性
(1) length,表示函数定义时的形参个数(arguments对象的属性length,实参的长度)
(2) prototype--对象原型
**在js中模拟类:
#支持对象的数据类型,但是没有类的正式概念。它通过构造函数,及其原型对象来模拟来近似的模拟类
#但是它是一种真正的面向对象的语言,它采用的是原型的继承,而不是类的继承。
(#类名首字母写,对象名用小写字母--编程惯例哦)
**一个对象的原型就是它的构造函数的prototype属性的值,当函数被定义的时候,prototype属性自动创建和初始化,初始化的值叫“原型对象”
**“原型对象”的用法:放置方法和不变属性(或为通用属性)
**使用“原型对象”的好处:a.显著减少每个对象所需的内存数量,因为对象可以继承原型的很多属性 b.在对象创建后添加到原型中的属性,对象也可以继承后加的属性
**object.hasOwnPropery('propertyname'):区分继承的属性和常规的属性
**属性的读取:“先常规,再继承,再创建”。先查找常规的,找到就不往下找了,如果常规没找到,就去继承(原型)里找,原型里也没有,就自动创建一个。
**更多:http://blog.csdn.net/chaojie2009/article/details/6719353
function rex(w,h){ this.width=w; this.height=h;}rex.prototype.area=function(){return this.width*this.height;} //要显示的用this来访问属性,与java c不同(可以省略)。或用下面的形式。//rex.prototype.area=function(){ with(this){return width*height;}}var r=new rex(3,4);var a=r.area();
(3) 定义函数自己的属性
当函数需要使用一个在调用过程中都保持不变的值时,使用Function对象的属性比定义一个全局变量更加方便,因为全局变量会使命名空间变得散乱。
var fname.count=0 //可在函数前申明function fname(){ return fname.count++;}
5.函数对象的2个方法: apply和call
详分析见http://blog.csdn.net/beiji_nanji/article/details/7585105
6.函数里的this指针
this指针是面向对象程序设计中的一项重要概念,它表示当前运行的对象。在实现对象的方法时,可以使用this指针来获得该对象自身的引用。
和其他面向对象的语言不同,JavaScript中的this指针是一个动态的变量,一个方法内的this指针并不是始终指向定义该方法的对象的
JavaScript中的this指针是一个动态变化的变量,它表明了当前运行该函数的对象。由this指针的性质,也可以更好的理解JavaScript中对象的本质:一个对象就是由一个或多个属性(方法)组成的集合。每个集合元素不是仅能属于一个集合,而是可以动态的属于多个集合。这样,一个方法(集合元素)由谁调用,this指针就指向谁。实际上,apply方法和call方法都是通过强制改变this指针的值来实现的,使this指针指向参数所指定的对象,从而达到将一个对象的方法作为另一个对象的方法运行。
- 【JS--基础--函数】--基本概念
- JS基础篇之基本概念
- js基础 函数
- js函数基础
- js中的函数基础
- JS基础--函数
- js函数基础、字符串函数
- JS基本概念
- JS基本概念
- 函数基本概念
- js基本概念(下)之语句与函数
- JS基础学习之 -- 函数
- js的常用基础函数
- JS基础:1.9 函数function
- 【js基础】字符串相关函数
- js基础(函数详解)
- js基本知识点总结-----js函数基础
- js基础---函数传参 数组基础
- VS2010 + MATLAB2010b + OpenCV2.3.1 运行TLD
- debian6安装以后无线网卡不能上网
- python开发总结五
- 电子硬件工程师要求?
- at91rm9200移植u-boot
- 【JS--基础--函数】--基本概念
- inux下vi命令 修改文件及保存的使用方法
- 3xian退役贴
- 在CMainFrame中创建MDI子窗体
- LINUX驱动注册过程失败处理不当引起的恶果
- freemarker 语法基础
- 模拟交通灯管理系统(掌握面向对象的经典方法)
- android 手机短信和定位
- 如何使用笔记本电脑自带modem收发传真