javascript学习笔记 - 引用类型 Function
五 Function类型
每个函数都时Function类型的实例。函数也是对象。
声明函数:
function func_name () {} //javascript解析器会在程序执行时率先读取函数声明,使其在执行任何代码之前可用(可访问)
var func_name = function(){}; //解析器执行到它所在的代码行,才会被解释执行。
因此函数名是个变量,保存的是指向函数对象的指针,不会与某个函数绑定,与包含对象指针的其他变量没什么区别。
1.没有重载
声明两个同名的函数,第二个会覆盖掉第一个
2.作为值的函数
函数名本身就是变量。因此函数体可以当作值来使用。可以当参数进行传递,也可以当其他函数的返回值。
function callSomeFunction (someFunction, someArgument){
return someFunction(someArgument);
}
3.函数内部属性
函数内部有两个特殊的对象:arguments 和 this
*arguments对象保存的是所有传入函数内部的参数。
*arguments.callee。这是一个指针,指向拥有该arguments对象的函数

function factorial(num) {
if(num <=1){
return 1;
}else{
return num*arguments.callee(num-1);//递归调用
//相当于:
//return num*factorial(num - 1);
//这样消除了函数名与内部递归调用函数名的紧密耦合性
}
}

*this 引用的是函数据以执行的环境的变量对象。
*caller 对象属性。此属性保存的是调用当前对象的函数的引用。如果在全局作用域中调用当前函数,值为null

function outer()
{
inner();
} function inner()
{
alert(arguments.callee.caller);
} outer();//返回outer()函数的源代码

4.函数属性和方法
length --- FunctionObject.length 函数参数的个数。函数没有参数,则返回0
apply() --- Function.apply(scope[ ,Function.arguments||Array])//传递的参数可以为Arguments对象,也可以为参数数组
call() --- Function.call(scope[, argument1,argument2,.......])//所要传递的参数必须一一列举吹来
这两个函数都是扩展它自身运行时所在的作用域。参数1,这两个函数运行时所在的作用域(一般都为对象);参数2, 传递给这个函数的参数。

window.color = 'red';
var o = {'color':'blue'}; function sayColor(){
alert(color);
} sayColor(); // red sayColor.call(this) //red
sayColor.call(window) //red
sayColor.call(o) //blue

使用这两个函数的好处是:降低对象与方法之间的耦合性。
javascript学习笔记 - 引用类型 Function的更多相关文章
- javascript学习笔记 - 引用类型 Object
引用类型是一种数据结构,也称作对象定义,类似于类的概念. 对象是引用类型的实例. javascript引用类型有:Object, Array, Date, RegExp, Function 使用new ...
- javascript学习笔记 - 引用类型 基本包装类型
六 基本包装类型 Boolean,Number,String 这三个引用类型亦称为基本包装类型,与基本的数据类型boolean,number,string相关联.为了方便操作这些基本类型的数据. 引用 ...
- javascript学习笔记 - 引用类型 单体内置对象
七 单体内置对象 1.Global对象 不属于任何对象的属性和方法,都归于它.全局作用域中定义的变量.函数,都属于Global对象 1.1 URI编码 encodeURI <=>deco ...
- javascript学习笔记 - 引用类型 Array
二 Array 1.可以通过length属性删除或创建新的数组项 arr = [1,2,3]; arr.length = 4;//增加 [1,2,3,undefined] arr.length = 2 ...
- javascript学习笔记 - 引用类型 RegExp
四 RegExp 格式: var expression = / pattern / flags; 1.flags 为标志.分别为g.i.m. g:表示全局模式.即模式将匹配所有的字符串,而不是在发现第 ...
- javascript学习笔记 - 引用类型 Date
三 Date new Date() 在不传递参数的情况下,新创建的对象自动获得当前日期和时间.参数接收毫秒的timestamp Date.parse() 接收表示日期的字符串,返回相应的日期毫秒数ti ...
- Java程序猿的JavaScript学习笔记(8——jQuery选择器)
计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...
- Java程序猿JavaScript学习笔记(2——复制和继承财产)
计划和完成在这个例子中,音符的以下序列: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaSc ...
- Java程序猿的JavaScript学习笔记(3——this/call/apply)
计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...
随机推荐
- Python + selenium之unitest(2)
unittest单元测试框架中重要的概念: 1.Test Case 一个Test Case实例就是一个测试用例.在一个完整的测试流程中,包括测试前准备环境的搭建(setUp),实现测试过程的代码(ru ...
- 利用jieba第三方库对文件进行关键字提取
已经爬取到的斗破苍穹文本以TXT形式存储 代码 import jieba.analyse path = 'C:/Users/Administrator/Desktop/bishe/doupo.text ...
- Android(java)学习笔记137:ListView编写步骤(重点)
1.ListView在我们的手机android编写程序中使用是十分广泛的,比如如下图中 短信 和 手机设置 都是ListView的效果: 手机设置: 短信: 2.正因为这 ...
- coredata 删除与更新
http://blog.csdn.net/rhljiayou/article/details/18037729 //删除 -(void)deleteData { NSManagedObjectCont ...
- [web开发] Vue+Spring Boot 上海大学预约系统开发记录
前端界面 使用Quasar将组件都排好,用好css. Quasar 入门 # 确保你在全局安装了vue-cli # Node.js> = 8.9.0是必需的. $ npm install -g ...
- tpcc-mysql运行结果解读
前言 首先我们需要知道tpcc-mysql是干什么的.TPC-C是专门针对联机交易处理系统(OLTP系统)的规范,一般情况下我们也把这类系统称为业务处理系统.tpcc-mysql是percona基于T ...
- ecplise——python not configured报错
解决方法:点击window——preferences——PyDey——pythonInterprter 最后成功
- 广播监听USB插入与拔出
package com.joy.usbbroadcastreceiver; import android.content.BroadcastReceiver; import android.conte ...
- 课外作业1:将一个double类型的小数,按照四舍五入保留两位小数
package come.one01; public class One02 { public static void main(String[] args) { double numa = 3.14 ...
- mysql group by的特殊性
SELECT create_year, userno , sum(sal) FROM user GROUP BY userno 以上语句,在oracle 或sql server肯定是语法错误 因为g ...