JavaScript 函数引用和函数调用

先看下面的代码:

 1 // 函数引用 代码一
 2 function f(){
 3     var x = 5;
 4     return x;
 5 }
 6 var a = f;
 7 var b = f;
 8
 9 console.log(a===b); // true
10 // 函数调用 代码二
11 function f2() {
12     var x = 5;
13     return x;
14 }
15 var a2 = f2();
16 var b2 = f2();
17 console.log(a2 === b2);
18
19 // 函数调用 代码三
20 function f3(){
21     var x = 5;
22     return function(){
23         return x;
24     }
25 }
26 var a3 = f3();
27 var b3 = f3();
28 console.log(a3 === b3); // false

以上代码:代码一是函数引用的例子,代码二是函数调用的例子,返回都为 true;代码三也是函数调用的例子,但是返回 false 。

我们现在来理解下函数引用和函数调用的本质区别:

当引用函数的时候,多个变量内存存储的是函数的相同的入口指针,因此对于同一个函数来讲,无论多少个变量引用,他们都是相等的。对于引用类型(对象,数组,函数等)比较的都是内存地址,如果他们内存地址一样的话,说明是相同的;

但是对于函数调用来讲,比如代码三,每次调用的时候,都被分配一个新的内存地址,他们的内存地址不相同,所以返回 false,但是对于代码二来讲,我们看到他们没有返回函数,只是返回数值,他们比较的不是内存地址,而是比较值,他们的值相等,所以返回 true 。

我们也可以看看下面实列化一个对象的列子,他们也被分配到不同的内存地址,因此返回 false,如下代码测试:

1 function F(){
2     this.x = 5;
3 }
4 var a = new F();
5 var b = new F();
6 console.log(a === b); // false

学习资源:理解函数引用和函数调用的区别

时间: 2024-08-02 17:47:31

JavaScript 函数引用和函数调用的相关文章

js函数引用、函数调用与回调函数

var function1=function2; 1.调用function1()函数的结果正好与调用function2()相同,因为两个函数都引用了相同的代码,因此函数名称也称为函数调用. 2.引用函数与调用函数的区别与函数名称后是否附有括号有关,函数引用只会单独出现,但函数调用则必定后随括号,很多时候还附有自变量. 3.window.onload=function(){ function1(); } 此时function1();就是回调函数,网页上所有其他事件能于onload事件处理器中作联结

JavaScript 函数参数传递到底是值传递还是引用传递

tips:这篇文章是听了四脚猫的js课程后查的,深入的理解可以参看两篇博客: JavaScript数据类型--值类型和引用类型 JavaScript数据操作--原始值和引用值的操作本质 在传统的观念里,都认为JavaScript函数传递的是引用传递(也称之为指针传递),也有人认为是值传递和引用传递都具备.那么JS的参数传递到底是怎么回事呢?事实上以下的演示也完全可以用于Java 首先来一个比较简单的,基本类型的传递: function add(num){ num+=10; return num;

Javascript读书笔记:函数定义和函数调用

定义函数 使用function关键字来定义函数,分为两种形式: 声明式函数定义: function add(m,n) { alert(m+n); } 这种方式等同于构造一个Function类的实例的方式: var add = new Function("m", "n", "alert(m+n);"); Function类构造方法的最后一个参数为函数体:"alert(m+n);",前面的都是函数的形参,参数必须是字符串形式的:&

JavaScript 函数—函数调用

JavaScript 函数有 4 种调用方式. 每种方式的不同在于 this 的初始化. 一.作为一个函数调用 以上函数不属于任何对象.但是在 JavaScript 中它始终是默认的全局对象. 在 HTML 中默认的全局对象是 HTML 页面本身,所以函数是属于 HTML 页面.在浏览器中的页面对象是浏览器窗口(window 对象).以上函数会自动变为 window 对象的函数. myFunction() 和 window.myFunction() 是一样的: 二.函数作为方法调用 注:函数作为

JavaScript函数,作用域以及闭包

JavaScript函数,作用域以及闭包 1. 函数 (1). 函数定义:函数使用function关键字定义,它可以用在函数定义表达式或者函数声明定义. a. 函数的两种定义方式: * function functionName() {} * var functionName = function(){} b. 两种函数定义不同之处 1). 声明提前问题 函数声明语句   :声明与函数体一起提前 函数定义表达式 :声明提前,但是函数体不会提前 请看下面图示:绿色线上面实在js初始加载的时候,查看

Javascript 函数及其执行环境和作用域

函数在javascript中可以说是一等公民,也是最有意思的事情,javascript函数其实也是一个对象,是Function类型的实例.因此声明一个函数首先可以使用 Function构造函数: var saySomething = new Function("something","console.log(something)"); saySomething("hello world!"); // 输出hello world! Function

深入浅出JavaScript函数 v 0.5

本文的观点是建立在<JavaScript权威指南 6th Ed> <JavaScript高级编程 3th Ed> <JavaScript精粹 2th Ed>之上, 笔者将尽所能将概念.原理叙述清楚,由于笔者水平有限,理解不当之处在所难免,请读者不吝交流. 目录 1 什么是函数? 2 函数就是对象! 3 函数字面量(函数表达式) 4 函数调用 4.1 方法调用模式 4.2 函数调用模式 4.3 构造器调用模式 4.4 间接调用模式 5 函数的参数与返回值 6 扩充类型的功

JavaScript 函数声明,函数表达式,匿名函数的区别,深入理解立即执行函数(function(){…})()

function fnName(){xxxx}; // 函数声明:使用function关键字声明一个函数,在指定一个函数名. //例如:(正常,因为 提升 了函数声明,函数调用可以在函数声明之前) fnName(); function fnName(){ alert('Hello World'); } var fnName = function(){xxxx}; //函数表达式:使用function关键字声明一个函数,但是未给函数命名,最后将匿名函数赋予给一个变量. //例如1:(报错,变量fn

3、JavaScript函数

知识点 函数定义 函数调用 传参 函数的返回值 变量的作用域 匿名函数 回调函数 自调函数 内嵌函数 递归调用 闭包 函数定义 来看下面的代码. function print(){ console.log('123'); } 上面的代码定义了一个函数 - function 定义函数的关键字 - print 函数名 - {} {}中的内容为函数体,即console.log('123'); 函数调用 print(); 使用上面的代码可以调用函数,函数的调用方法为funcName([arg1,arg2