博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript引用类型Function实例详解
阅读量:6373 次
发布时间:2019-06-23

本文共 2216 字,大约阅读时间需要 7 分钟。

hot3.png

Function类型

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

function getSum(a, b) {  return a + b;}//前端全栈学习交流圈“866109386alert(getSum(2, 3));//5var copy = getSum;alert(copy(2, 3));//5getSum = 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);}//前端全栈学习交流圈:866109386function 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]]属性仅包含全局对象。

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

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

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

函数声明提升:

func();//报错:func is not a functionvar 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。定义之后也不可用,因为它不在变量对象

例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();

转载于:https://my.oschina.net/u/3970421/blog/2875758

你可能感兴趣的文章
Namespacing in PHP (php 中使用命名空间)
查看>>
译:在ASP.NET MVC5中如何使用Apache log4net 类库来记录日志
查看>>
GCD之并行串行区别
查看>>
PHP哈希表碰撞攻击
查看>>
linux根目录下文件夹概览
查看>>
数字在排序数组中出现的次数
查看>>
前端工程化二(requirejs + gulp)
查看>>
jmeter关于录制带中文的get请求回放会报错的问题
查看>>
WPF ViewModel与多个View绑定后如何解决的问题
查看>>
C#使用Xamarin开发可移植移动应用(5.进阶篇显示弹出窗口与通讯中心)附源码
查看>>
阿里云轻量应用服务器是什么?值得购买吗?
查看>>
WPF之VirtualizingStackPanel.IsVirtualizing="False"
查看>>
数据安全
查看>>
【JavaScript框架封装】实现一个类似于JQuery的事件框架的封装
查看>>
搞懂分布式技术22:Kafka 安装及快速入门
查看>>
剑指offer--3
查看>>
MySQL:Innodb Handler_read_* 变量解释
查看>>
规则引擎在公安系统中的应用及作用
查看>>
Android桌面小部件AppWidget:音乐播放器桌面控制部件Widget(3)
查看>>
09 - JavaSE之线程
查看>>