javascript原型和闭包之---Function(六)
来源:互联网 发布:js设置span标签隐藏 编辑:程序博客网 时间:2024/06/18 01:48
还记得声明函数的几种方法吗?
直接声明函数
function funcName(/*参数列表*/){ //函数体}
函数表达式
var funcName = function(){};
Function 类型 new Function
var func = new Function();
Function可作为构造函数 可以用来新建函数对象
Function构造函数的语法:
- 一个参数都不传的情况 创建的就是一个空的函数
var 函数名 = new Function() - 只传一个参数的情况 这个参数就是函数体
var 函数名 = new Function(“函数体”) - 传多个参数的情况,最后一个参数为函数体,前面的参数都是该函数的形参名
//举个栗子
创建一个计算两个数的和的函数 var sum = new Function("a", "b", "return a + b;"); console.log(sum(1, 2));
作为值的函数
因为ECMAScript中的函数名本身就是变量,所以函数也可以作为值来使用。也就是说,不仅可以像传递参数一样把一个函数传递给另一个函数,而且可以将一个函数作为另一个函数的结果返回。(return 一个函数,闭包用的尤其多,后续解释闭包重点说吧)
function fun(){ var num = 123; return function(a){ num = a; return num; }; }
函数内部属性
在函数内部,有两个特殊的对象:arguments和this。
arguments是一个类数组对象,包含着传入函数中的所有参数。虽然arguments的主要用途是保存函数参数,但这个对象还有一个名叫callee的属性,该属性是一个指针,指向拥有这个arguments对象的函数。
function test(a,b){ console.log(a,b); console.log(arguments); } test();
(1).一个函数有形参的时候,调用的时候,可以不传参数
(2).一个函数没有形参的时候,调用时后,可以传参 arguments对象
(3).一个函数不管有没有形参,调用的时候都会把实参的值存入arguments对象
在函数内进行去重操作,然后返回去重后的数组
var dist = new Function(` var arr = []; for (var i = 0; i < arguments.length; i++) { if(arr.indexOf(arguments[i])==-1){ arr.push(arguments[i]); } } return arr; `); console.log(dist(3, 6, 9, 3, 2, 6));
this对象引用的是函数执行的环境对象——或者也可以说是this值(当在网页的全局作用域中调用函数时,this对象引用的就是window)。
window.name = "Window"; var o = { name:"kong" }; function sayName(){ console.log(this.name); } o.sayName=sayName; o.sayName();//kong
Function的原型
还记得我们前面说的构造函数吗?构造函数在实例化对象的时候要用new关键字。
当我们用Function声明函数的时候,用的也是new操作符。
var 函数名 = new Function();
也就是说**函数实际上也是对象,每个函数都是Function类型的实例。
Function这个构造函数也有原型对象,Function.prototype**
通过在控制台的输出可以发现:Function的原型对象是一个空函数。
Function的原型对象的原型对象是Object
这句话再解释一遍:原型对象也是对象,每个对象都有一个__proto__属性,可以访问原型对象
Function 的原型对象是:Function.prototype
对象通过__proto__属性访问原型对象也就是 Function.prototype.__proto__
那我们再来看一下,Function的原型对象(Function.prototype)的原型对象(Function.prototype.__proto__)的原型对象(Function.prototype.__proto__.__proto__)是:null
发现最后的原型对象为null。 还记得我们在prototype与proto中也打印过,原型对象的终点也是null。
来图回忆一下:
有了这些,接下来明白原型链就很容易了。
- javascript原型和闭包之---Function(六)
- JavaScript原型和闭包之---原型(三)
- javascript原型和闭包之------原型链 (七)
- JavaScript原型和闭包之---构造函数(二)
- javascript原型和闭包之------闭包
- JavaScript原型和闭包之---prototype与__proto__的关系(四)
- 深入理解javascript原型和闭包(完结)
- 深入理解javascript原型和闭包(完结)
- 深入理解javascript原型和闭包(完结)
- 深入理解javascript原型和闭包(完结)
- 深入理解javascript原型和闭包(完结)
- 深入理解javascript原型和闭包
- 深入理解JavaScript原型和闭包
- 深入理解javascript原型和闭包
- 深入理解javascript原型和闭包
- 深入理解javascript原型和闭包
- 深入理解javascript原型和闭包
- 深入理解javascript原型和闭包
- 爬虫基础知识
- fortran中整数的范围
- Bootstrap 实现文件的本地拖拽上传
- GreenDao实体类实现Serializable接口报错,自动生成 serialVersionUID
- java中对list进行分页显示数据到页面
- javascript原型和闭包之---Function(六)
- 对比svn两个不同分支目录的文件
- c++11自定义线程池
- Linux操作系统4.5.6.7代差别
- Java类加载流程
- 深入理解阻塞队列(一)——基本结构
- HorizontalScrollView与 radioButton 连用
- Linux之文件权限、用户管理
- 解题报告:HDU_6053 TrickGCD 莫比乌斯反演