js 匿名函数 js-函数定义方法
1.任何函数都是有返回值的,没有返回值的,在某些语言里称之为过程例如PL/SQL
2.js中的函数如果没有return 关键字指明给出的返回值,那么当调用完函数后,会返回“undefined"关键字
3.js中传递的参数不会检测类型,如果对类型十分明确,请用typeof()来对传入的参数进行检测。
4这种匿名函数会在生成后,直接调用:
alert((function(x){return x*x})(10));
格式大概为:第一个括号内包含函数定义,第二个括号为传入函数的参数。
5.参数的设定可以可选,如果参数可选了,那么应该为其摄人一个默认值,可选的参数最后在参数列表的最后一位。
function copyPropertype(object, array) {
array = array || [];
for (var propertype in object) {
array.push(propertype)
}
}
6.arguments,arguments是一个标识符,不是保留字,如果在函数体内定义了相同的变量名,那么会隐藏对arguements的引用。同时也要注意到arguments是一个类似于数组的对象。对命名参数的引用可以使用参数名也可以使用argument[n]的方式来进行引用。
callee属性,用来引用这在执行的函数,允许对没有命名的函数递归的调用自身例如:
function (x) {
if (x <= 1) return 1;
return x * arguments.callee(x - 1);
}
7.为了便于对函数的调用,可以把函数的参数看为一个对象,然后通过对对象的属性,来获取穿入的值,这样就便于进行对函数的调用。
function arraySort(fromArr, fromStart, toArr, toStart, length) {
//do something
}
function userObject(args){
arraySort({
args.fromArr,
args.fromStart,
args.toArr,
args.toStart,
args.length
})
}
8.在js中,函数不仅可以被定义跟调用,而且它还是一种数据类型,因此函数还能被赋值给某个变量。函数的函数名并没有什么意义,它只是用来引用函数的变量名而已。
函数不仅可以赋值给全局变量外,还能赋值给某个对象的属性,通过属性来调用函数。
函数可以没有函数名,只要有保存该函数的引用的位置即可。例如array[0]=function(){};
9.在方法中,用来调用方法的对象成为this的指向
var obj = {
oper1: 1,
oper2: 1,
result: function () {
return this.oper1 + this.oper2;
}
};
10.当一个函数而不是对象的方法而言,this的指向总是全局变量。例如:
var name = "out";
function getName() {
var name = "in1";
function getInName() {
var name = "in2";
return this.name;
}
alert("嵌套函数:" + getInName());
return this.name;
}
alert(getName());
alert(obj.result());
11.函数是一个对象。具有对象的属性跟方法。
11.1length属性。该属性只读。该属性与arguments.length不同,该属性时函数需要传递的参数的个数,具体为,函数定义时的参数个数。而arguments.length则是函数调用时传递进来的参数的个数。
function check(args) {
alert(args.length);
alert(args.callee.length);
};
function f(x, y, z) {
check(arguments);
};
f(1, 2);
实际需要3个,但是只传入了2个。
11.2.可以定义自己的函数属性。如果该函数在使用过程中有一个保值不变的值,Function的属性定义比全局变量更加方便。
function func() {
return func.count++;
}
func.count = 1;
alert(func());
alert(func());
12.子类,超类。
function rect(w, h) {
this.width = w;
this.height = h;
}
rect.prototype.area = function () {
return this.x * this.y;
}
function PositionRect(x, y, w, h) {
//这个是调用rect的构造方法
rect.call(this, w, h);
this.x = x;
this.y = y;
}
//这个是重点,原型变为new rect
PositionRect.prototype = new rect();
//构造函数PositionRect
PositionRect.prototype.constructor = PositionRect;
var P = new PositionRect(1, 2, 33, 22);
alert(P.area());
alert(P.constructor);
在js中常见一个子类并不像创建一个直接继承的Object的类那样明显。首先,从子类的构造函数调用超类的构造函数是一个问题。当这么做的时候要注意,超类的构造函数是作为新创建的对象的一个方法调用的。接下来,设置子类构造函数函数原型对象需要一些技巧,必须显示地把这个原型对象创建为超类的一个实例,然后显示地设置原型对象的constructor属性。另外还要删除超类构造函数在原型对象中创建的所有属性,因为重要的是原型对象从它的原型那里继承的那些属性。
12.2构造函数链。
如果构造函数需要显式地调用超类的构造函数,这叫做构造函数链。在创建子类的时候很常见。如果只有一个子类,可以为子类的原型对象添加一个名位superclass的属性。从而简化构造函数的语法。例如
PositionRect.prototype.superclass=rect;
和属性定义相比,构造函数链语法更简单:
function PositionRect(x, y, w, h) {
this.superclass(w, h);
this.x = x;
this.y = y;
}
注意,超类构造函数通过this对象地显式地调用。这意味着不再需要使用call()或者apply()来把超类构造函数作为该对象的方法来调用。
注意:这种技术只在简单地继承层次才起作用,如果B是A的子类,C又是B的子类,B和C都使用这种superclass方法,当创建c的实例时,this.superclass引用B(),B()构造函数将无线递归。除了简单的子类外,其他的继承都需要用函数构造方法。
13.调用父类的被覆盖的方法:
可以用superClass.prototype.method.apply(子类)
14.类别识别:
可以通过 instanceOf来测试是否是一个实例。注意对象是它自己的类地一个实例,也是任何超类的一个实例。因此,对于任何对象o,o instanceof Object总是为true,有趣的是instanceof对函数也邮箱,因此对任意函数f,下面的表达式都为true:
typeof f=="function" f instanceof Function f instanceof Object
如果要测试对象是否是一个具体的类地一个实例,以及是否不是某个子类的实例,可以查看对象的constructor属性。
var d=new Date(); var isobject=d instanceof Object; var realobject=d.constructor==Object;
js 匿名函数 js-函数定义方法的更多相关文章
- js匿名自执行函数中闭包的高级使用(---------------------------******-----------------------------)
先看看最常见的一个问题: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...
- js匿名自执行函数
匿名自执行函数:没有方法名的函数闭包:闭包是指有权访问另一个函数作用域变量的函数: 通过一个实例来解释: 从网上找到了一个案例,使用了for循环.匿名自执行函数.setTimeout. 案例1: va ...
- JavaScript函数的多种定义方法
缘起 javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花,当然,能理解各型各色的写法也是对 javascript语言特性更进一步的深入理解, ...
- js静态私有变量(将方法变成原型模式,被所有实例共享,而方法操作变量,故变量是静态)
js静态私有变量(将方法变成原型模式,被所有实例共享,而方法操作变量,故变量是静态) 一.总结 1.js函数中的private和public:js函数中的私有变量 var 变量名,公有变量 this. ...
- js课程 1-4 js变量的作用域是怎样的
js课程 1-4 js变量的作用域是怎样的 一.总结 一句话总结:只有在函数内部前面带var的变量为局部变量,局部变量只能在函数体内使用. 1.什么情况下会出现NaN类型的错误,举一例? Num ...
- js function定义函数的4种方法
js function定义函数的4种方法 1.最基本的作为一个本本分分的函数声明使用. 复制代码代码如下: 复制代码代码如下: function func(){} 或 var func=functio ...
- js 立即执行函数定义方法
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...
- js/jquery 回调函数的定义方法
基本写法: 带参数的回调函数 以上回调函数,直接传入function作为参数,同样,还可以传入json对象作为参数...如下. 该方法的优势是可以定义多个回调函数....类似$.ajax回调函数中的s ...
- js 定义函数的几种方法 以及如何调用
/*1.方法调用模式: 先定义一个对象,然后在对象的属性中定义方法,通过myobject.property来执行方法,this即指当前的myobject 对象.*/ var car = { carId ...
随机推荐
- APP支付宝登录--PHP处理代码
1.首先需要参数: aucth_code udid re_id极光推送id 2.https://open.alipay.com/platform/keyManage.htm 配置公钥私钥 3.需要s ...
- 1121 Django基本
目录 Django前戏 一.课程导读 1.web应用 2.c/s b/s 架构 3.Python Web框架 二.原生socket服务 三.http协议 什么是http协议 四大特性 http工作原理 ...
- 大数据之路week04--day06(I/O流阶段一 之异常)
从这节开始,进入对I/O流的系统学习,I/O流在往后大数据的学习道路上尤为重要!!!极为重要,必须要提起重视,它与集合,多线程,网络编程,可以说在往后学习或者是工作上,起到一个基石的作用,没了地基,房 ...
- TCP/IP分层图解
网络协议通常分不同层次进行开发,每一层分别负责不同的通信功能.一个协议族,比如 T C P / I P,是一组不同层次上的多个协议的组合. T C P / I P通常被认为是一个四层协议系统,如图1 ...
- java后台表单验证工具类
/** * 描述 java后台表单验证工具类 * * @ClassName ValidationUtil * @Author wzf * @DATE 2018/10/27 15:21 * @VerSi ...
- mysql对两个字段进行自定义排序
Mysql order by 多字段排序 ') desc,ADD_DATE desc mysql单个字段降序排序: select * from table order by id desc; mysq ...
- 在stm32开发可以调用c标准库的排序和查找 qsort bsearch
在嵌入式开发中,可以使用c标准库自带的库函数,而不用自己去早轮子,qsort 和bsearch就是其中的两个比较好用的 二分法查找,前提是已经排序好的数据.下面的代码, 如果数据为排序,则要进行排序后 ...
- Java8-Lambda-No.01
import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util ...
- BZOJ 2400: Spoj 839 Optimal Marks (按位最小割)
题面 一个无向图,一些点有固定权值,另外的点权值由你来定. 边的值为两点的异或值,一个无向图的值定义为所有边的值之和. 求无向图的最小值 分析 每一位都互不干扰,按位处理. 用最小割算最小值 保留原图 ...
- Oracle - 特殊字符问题
Oracle更新表字段或者查询表字段时内容中含有特殊字符&的解决方法 现象 解决方式 1. 字符串拼接 UPDATE T_MENU_INFO SET menu_code='/ABeptjk/g ...