五 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的更多相关文章

  1. javascript学习笔记 - 引用类型 Object

    引用类型是一种数据结构,也称作对象定义,类似于类的概念. 对象是引用类型的实例. javascript引用类型有:Object, Array, Date, RegExp, Function 使用new ...

  2. javascript学习笔记 - 引用类型 基本包装类型

    六 基本包装类型 Boolean,Number,String 这三个引用类型亦称为基本包装类型,与基本的数据类型boolean,number,string相关联.为了方便操作这些基本类型的数据. 引用 ...

  3. javascript学习笔记 - 引用类型 单体内置对象

    七 单体内置对象 1.Global对象 不属于任何对象的属性和方法,都归于它.全局作用域中定义的变量.函数,都属于Global对象 1.1 URI编码  encodeURI <=>deco ...

  4. javascript学习笔记 - 引用类型 Array

    二 Array 1.可以通过length属性删除或创建新的数组项 arr = [1,2,3]; arr.length = 4;//增加 [1,2,3,undefined] arr.length = 2 ...

  5. javascript学习笔记 - 引用类型 RegExp

    四 RegExp 格式: var expression = / pattern / flags; 1.flags 为标志.分别为g.i.m. g:表示全局模式.即模式将匹配所有的字符串,而不是在发现第 ...

  6. javascript学习笔记 - 引用类型 Date

    三 Date new Date() 在不传递参数的情况下,新创建的对象自动获得当前日期和时间.参数接收毫秒的timestamp Date.parse() 接收表示日期的字符串,返回相应的日期毫秒数ti ...

  7. Java程序猿的JavaScript学习笔记(8——jQuery选择器)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  8. Java程序猿JavaScript学习笔记(2——复制和继承财产)

    计划和完成在这个例子中,音符的以下序列: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaSc ...

  9. Java程序猿的JavaScript学习笔记(3——this/call/apply)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

随机推荐

  1. 【Apache】HTTPD 2.4.37 + OpenSSL 1.1.1 企业级安全配置(含TLS修复)

    我为什么要写这一篇稿子? 为了避免更多的运维.开发者没能实现企业的信息安全,我将共享出我个人的HTTPD的安全修复(2.2和2.4差不太多就看2.4就好) 起因:我为某M工作,但因某M和testin合 ...

  2. bzoj1037 [ZJOI2008]生日聚会

    Description 今天是hidadz小朋友的生日,她邀请了许多朋友来参加她的生日party. hidadz带着朋友们来到花园中,打算坐成一排玩游戏.为了游戏不至于无聊,就座的方案应满足如下条件: ...

  3. 任务管理器 用 Ctrl + Shift + Esc 替换 Ctrl + Alt + Del

    任务管理器 用 Ctrl + Shift + Esc 替换 Ctrl + Alt + Del

  4. 使用Process组件访问本地进程

    实现效果; 知识运用: Process组件的StartInfo属性 //获取或设置要传递给Process的Start方法的属性 public ProcessStartInfo StartInfo {g ...

  5. spring aop切面中获取代理bean的名字以及bean

    //切面中搞: Map<String , Object> map = (Map)ApplicationContextHelper.getBean(proceedingJoinPoint.g ...

  6. linux文件或文件夹常见操作

    创建文件夹 mkdir [-p] DirName  在工作目录下,建立一个名为 A 新的子目录 : mkdir A  在工作目录下的 B目录中,建立一个名为 T 的子目录:    若 B 目录不存在, ...

  7. label自适应文本大小

    UILabel *label = [[UILabelalloc] initWithFrame:CGRectZero]; NSString *string = @"aa2fkoksdajfis ...

  8. poj3525 Most Distant Point from the Sea

    题目描述: vjudge POJ 题解: 二分答案+半平面交. 半径范围在0到5000之间二分,每次取$mid$然后平移所有直线,判断半平面交面积是否为零. 我的eps值取的是$10^{-12}$,3 ...

  9. NowCoder 9.9 模拟赛

    T1.中位数 二分答案x,原序列大于x的置为1,小于x的置为-1,判断是否存在长度大于m的区间和大于0(也就是大于x的数多于小于x的数),若有,则ans>=x,否则ans<x #inclu ...

  10. MySQL中CONCAT()的用法

    MySQL中CONCAT()的用法 在日常开发过程中,特别是在书写接口的时候,经常会遇到字符串拼接的情况,比如在返回图片数据时,数据库里往往存储的是相对路径,而接口里一般是存放绝对地址,这就需要字符串 ...