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

    使用这两个函数的好处是:降低对象与方法之间的耦合性。

时间: 2024-08-27 10:57:53

javascript学习笔记 - 引用类型 Function的相关文章

javascript学习笔记 - 引用类型 Object

引用类型是一种数据结构,也称作对象定义,类似于类的概念. 对象是引用类型的实例. javascript引用类型有:Object, Array, Date, RegExp, Function 使用new 关键字声明一个引用类型的实例. 一 Object 两种创建对象的方法. obj = new Object()//对象声明 obj = {}//对象字面量 对象字面量创建对象,并不会调用Object构造函数

javascript学习笔记 - 引用类型

引用类型是一种数据结构,也称作对象定义,类似于类的概念. 对象是引用类型的实例. javascript引用类型有:Object, Array, Date, RegExp, Function 使用new 关键字声明一个引用类型的实例. 一 Object 两种创建对象的方法. obj = new Object()//对象声明 obj = {}//对象字面量 对象字面量创建对象,并不会调用Object构造函数 二 Array 1.可以通过length属性删除或创建新的数组项 arr = [1,2,3]

javascript学习笔记 - 引用类型 Array

二 Array 1.可以通过length属性删除或创建新的数组项 arr = [1,2,3]; arr.length = 4;//增加 [1,2,3,undefined] arr.length = 2;//删除 [1,2]arr[6] = 6; // [1,2,3,undefined,undefined,6] 2.检测数组 Array.isArray() 3.转换方法 调用数组的toString()方法,返回由数组中每个值的字符串形式拼接而成的一个以逗号分隔的字符串.实际上,为了创建这个字符串,

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

七 单体内置对象 1.Global对象 不属于任何对象的属性和方法,都归于它.全局作用域中定义的变量.函数,都属于Global对象 1.1 URI编码  encodeURI <=>decodeURI 不会编码本身属于uri的特殊字符 encodeURIComponent  <=> decodeURIComponet 将所有非标准字符进行编码 1.2 window对象 在web浏览器中,一般是将Global对象当作window对象的一部分.因此全局作用域中的变量.函数,都可以通过wi

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

六 基本包装类型 Boolean,Number,String 这三个引用类型亦称为基本包装类型,与基本的数据类型boolean,number,string相关联.为了方便操作这些基本类型的数据. 引用类型和基本包装类型最大的区别在于对象的生存期.引用类型在代码执行流离开当前作用域之前都是一直存在的,基本包装类型只存在与代码流执行读取基本类型的值的一行代码之中.例如: var str = 'hello,world';//基本类型的数据 str.color = 'red';//创建String包装对

javascript学习笔记 - 引用类型 RegExp

四 RegExp 格式: var expression = / pattern / flags; 1.flags 为标志.分别为g.i.m. g:表示全局模式.即模式将匹配所有的字符串,而不是在发现第一个匹配项时就立即停止. i:表示不区分大小写.  m:表示多行模式,即在到达一行文本末尾时还会继续查找下一行.   2.RegExp实例的属性 global:是否设置了g标志: ignoreCase:是否设置了i标志: lastIndex:表示开始搜索下一个匹配项的字符位置,从0算起: multi

javascript学习笔记 - 引用类型 Date

三 Date new Date() 在不传递参数的情况下,新创建的对象自动获得当前日期和时间.参数接收毫秒的timestamp Date.parse() 接收表示日期的字符串,返回相应的日期毫秒数timestamp.日期字符串的格式会因为浏览器地区设置的不同而不同.如果传入的字符串不能解析,则返回NaN Date.UTC() 接收的参数分别是年份.基于0为一月的月份.月中的日期,1-31.小时,0-23.分钟.秒.毫秒.这些参数只有年和月是必需的. 1.继承的方法 toLocalString()

JavaScript高级程序设计学习笔记--引用类型

Object类型 对象字面量表示法: var person={ name:"Nicholas", age:29, 5:true }; 这人例子会创建一个对象,包含三个属性:name,age和5.但这里的数值属性名会自动转换为字符串. 对象属性的访问:点表示法和方括号语法 alert(person["name"]); // "Nicholas" alert(person.name); // "Nicholas" 从功能上看,这两

javascript学习笔记---ECMAScript语法(引用类型)

引用类型通常叫做类(class). 本教程会讨论大量的 ECMAScript 预定义引用类型. 引用类型 引用类型通常叫做类(class),也就是说,遇到引用值,所处理的就是对象. 本教程会讨论大量的 ECMAScript 预定义引用类型. 从现在起,将重点讨论与已经讨论过的原始类型紧密相关的引用类型. 注意:从传统意义上来说,ECMAScript 并不真正具有类.事实上,除了说明不存在类,在 ECMA-262 中根本没有出现"类"这个词.ECMAScript 定义了"对象定