当前位置: 首页 > 编程笔记 >

JavaScript引用类型Function实例详解

田鸿彩
2023-03-14
本文向大家介绍JavaScript引用类型Function实例详解,包括了JavaScript引用类型Function实例详解的使用技巧和注意事项,需要的朋友参考一下

本文实例讲述了JavaScript引用类型Function。分享给大家供大家参考,具体如下:

Function类型

函数是对象,函数名是指针:每个函数都是Function类型的实例。由于函数是对象,因此函数名是一个指向函数对象的指针,不会与某个函数绑定,一个函数可能会有多个名字。

function getSum(a, b) {
  return a + b;
}
alert(getSum(2, 3));//5
var copy = getSum;
alert(copy(2, 3));//5
getSum = null;
alert(copy(2, 3));//5

定义函数的方式有三种:函数声明函数表达式Function构造函数

Function构造函数接收任意数量的参数,前面的参数枚举了函数的参数,最后一个参数是函数体。一般不推荐使用Function构造函数定义函数。

var getSum = new Function("a", "b", "return a + b";

JavaScript没有函数重载的概念,若声明了两个同名函数,则后面的函数会覆盖前面的函数。

由于函数名本身是变量,因此函数也可以作为值来使用,不仅可以传递一个函数作为参数,还可以将函数作为返回值。

function callFunction(func, arguments) {
  return func(arguments);
}
function sayHello(name) {
  return "Hello, " + name;
}
var result = callFunction(sayHello, "Alice");
alert(result);//Hello, Alice

①、函数声明

function 函数名称(参数|可选) { 函数体 }

例:

function func1(){// 声明,程序的一部分
  function func() {// 声明,函数体的一部分
    ...//函数体
  }
}

②、函数表达式

function 函数名称|可选(参数|可选) { 函数体 }

例1:

var fun = function func() {};//表达式,赋值表达式的一部分

例2:

new function func(){};//表达式,new表达式

例3:

(function func(){});
//表达式,包含在分组操作符——括号()内,括号()内只能包含表达式

例4:

[function func() {}];//表达式,数组初始化器内只能是表达式

例5:

1, function func() {};//表达式,逗号只能操作表达式

③、函数构造器

函数构造器创建的函数的[[Scope]]属性仅包含全局对象。

<script>
  var a = 1;
  func1();
  function func1() {
    var a = 2;
    var b = 3;
    var func2 = new Function("alert(a); alert(b);");
    func2();//1,b is not defined
  }
</script>

函数构造器创建的函数func2可以从全局对象中取得变量a,但全局对象中没有b,因此报错:b未定义。

函数声明和函数表达式的区别

1)函数声明在进入上下文阶段创建,在代码执行阶段就已经可用了,函数表达式则是在代码执行阶段才创建,所以函数声明可以提升,但函数表达式则不能。

函数声明提升:

func();//Function declaration
function func(){
  alert("Function declaration");
}

函数表达式不能提升:

func();//报错:func is not a function
var func = function (){
  alert("Function expression");
}

2)函数声明影响变量对象VO,也就是存储在上下文的VO中的变量对象,函数表达式不影响变量对象VO,不存在于变量对象中,这意味着既不可能通过名称在函数声明之前调用它,也不可能在声明之后调用它。但是,函数表达式在递归调用中可以通过名称调用自身。

例1:

alert(func); //报错:func is not a function。定义之前不可用,因为它在代码执行阶段创建
(function func() {});
alert(func); //报错:func is not a function。定义之后也不可用,因为它不在变量对象VO中

例2:

(function func(param) {
  if (param) {
    return;
  }
  func(true);//func可用,递归调用可以通过名称调用自身
})();
func(); // func is not a function,外部不可用

3)函数声明只能出现在程序或函数体内,不能出现在表达式或块({ … })中,如if、while或for语句中。因为JavaScript无块级作用域,只有函数和全局作用域。 函数表达式出现在表达式的位置。

函数声明:有的浏览器会返回if,而有的浏览器会返回else。

if (true) {
  function func() {
    alert('if');
  }
}
else {
  function func() {
    alert('else');
  }
}
func();

函数表达式:所有浏览器都返回if。

var func;
if (true) {
  func = function() {
    alert('if');
  };
}
else {
  func = function() {
    alert('else');
  };
}
func();

更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《javascript面向对象入门教程》、《JavaScript常用函数技巧汇总》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

 类似资料:
  • 函数的创建方法 函数也是对象,每个函数是Function类的一个实例,函数是对象,因此函数名就是指向函数对象的指针,函数的定义常见的有两种: 1、使用关键字function声明,也就是 函数声明。 function sum (num1, num2) { return num1 + num2; } 2、将匿名函数赋值给一个变量,也就是 函数表达式。 var sum = function (n

  • 本文向大家介绍JavaScript引用类型和基本类型详解,包括了JavaScript引用类型和基本类型详解的使用技巧和注意事项,需要的朋友参考一下 在javascript中存在着两种类型的数据:基本类型和引用类型。 基本类型简单的说就是简单的数据段。 引用类型是由多个值构成的对象。 当我们进行赋值操作时,解析器会首先分析数据是值类型还是引用类型。 两种访问方式: 基本类型值:按值访问,操作的是他们

  • 本文向大家介绍JavaScript中Function详解,包括了JavaScript中Function详解的使用技巧和注意事项,需要的朋友参考一下 关键字function用来定义函数。 注意,function语句里的花括号是必需的,即使函数体只包含一条语句。 在JavaScript中,函数是Function类的具体实例。而且都与其它引用类型一样具有属性和方法。 函数名实际上是指向函数对象的指针,函

  • Date类型的创建 创建时间对象是由关键字new和构造函数Date()来创建的。 var d = new Date(); Date()中保存的是从1979年1月1日零时开始经过的毫秒数,再划分为年/月/日/时/分/秒/毫秒、周。 在调用Date()函数而不传入参数的情况下,将自动获得当前的日期和时间, var d = new Date(); document.write(d); //Fri Ma

  • Array类型 数组是除了Object之外最常用的数据类型,javascript中的数组可以保存任何类型的数据,如:第一个位置可以保存数字,第二个位置可以保存字符串,第三个位置可以保存对象等。数组的长度(大小)随着数据的新增加而自动增大。 数组的创建 数组的创建如果细致分的话,可以分为5种方法, 第一种是通过关键字new后跟构造函数Array()创建: var arr1 = new Array()

  • Object类型 定义Object类型的方法 创建Object实例的方式可以说有三种,第一种是通过关键字new后跟构造函数Object来定义: var obj1 = new Object(); obj1.name = "Tom"; //为对象添加name属性并赋值Tom obj1.age = 21; //为对象添加age属性并赋值21 第二种方式是通过对象字面量表示法创建对象,属性名与属性值是以

  • 本文向大家介绍ES6中Symbol类型用法实例详解,包括了ES6中Symbol类型用法实例详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了ES6中的Symbol类型。分享给大家供大家参考,具体如下: Symbol是在ES6中新加入的类型。 正如我们所知,JavaScript中有以下几种类型: Undefined ,Null ,Boolean ,Number ,String, Objec

  • 说起来ECMAScript 中什么最有意思,我想那莫过于函数了——而有意思的根源,则在于函数实际上是对象。每个函数都是Function 类型的实例,而且都与其他引用类型一样具有属性和方法。由于函数是对象,因此函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定。函数通常是使用函数声明语法定义的,如下面的例子所示。 function sum (num1, num2) { return