zoukankan      html  css  js  c++  java
  • JavaScript之Function类型

    以下的学习笔记来自于一本在 JavaScript 领域非常有名的书籍《 JavaScript 高级程序设计(第 3 版)》,和 孔浩老师的视频教程(孔老师也是参考这本书,丰富了这本书上的内容)。我只是一个知识的搬运工,以期通过搬运知识来加深对知识的理解。

    一、基本认识

    函数是 ECMAScript 中最最有意思的部分,最最重要的部分。最有意思的根源在于:函数是对象

    函数就是一个非常特殊的对象,是一个 Function 类型的实例,其实在内存中存储的操作是通过一个键值对来存储的。

    函数的第 1 种定义方式,即使用函数声明语法来定义的:

    function fn1() {
      alert("fn1");
    }

    由于函数是一个对象,所以可以通过如下方式定义,以下是通过函数的拷贝来完成赋值,两个引用并没有指向同一个对象

    // 这句话在底层实际上是完成了一次函数的【复制】,fn2 和 fn1 的引用并没有指向同一个对象。
    var fn2 = fn1;
    
    fn2();
    fn1 = function() {
      alert("fnn1");
    }

    以下是 函数 和 对象 在 “=” 赋值上的重要区别:

    函数虽然是一个对象,但是却和对象有一些区别,对象是通过引用的指向完成对象的赋值的,而函数却是通过对象的拷贝来完成的。
    所以上面的函数 fn1 虽然变了,并不会影响 fn2 。

    下面我们再来看看对象的赋值,对于对象而言,是通过引用的指向来完成赋值的,此时修改 o1 或者 o2 会将两个值都受到影响:

    var o1 = new Object();
    var o2 = o1;
    o2.name = "Leon";
    alert(o1.name);

    二、JavaScript 的 函数 没有重载(理解的关键在于“把函数名想象为指针”)

    笔者注:正是因为函数名就是一个指针(书上的原话是“函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定。”)

    这一点其实很好理解,我们看书上的例子就可以了,这一点不再赘述。

    三、函数声明与函数表达式

    理解关键点:解析器会率先读取函数声明,并使其在执行任何代码之前可以被访问。

    四、把值作为函数(在一个函数中返回另一个函数)

    我们首先要弄清楚一点:要访问函数的指针,使用函数名不加括号;要执行某个函数,使用函数名加括号。

    下面的一篇文章帮助你理解函数的作用域和闭包的概念。

    http://www.cnblogs.com/front-Thinking/p/4317020.html

  • 相关阅读:
    mysql的undo log和redo log
    MySQL表的定期分析检查优化
    MySQL 数据库设计总结
    Innodb引擎下mysql自身配置优化
    linux的top命令参数详解
    InnoDB的关键特性-插入缓存,两次写,自适应hash索引
    第一次接私活亲身经历
    码农与技术控
    软件公司与非软件公司区别(纯个人看法)
    SQL Server表 & 存储过程 创建日期查询
  • 原文地址:https://www.cnblogs.com/liweiwei1419/p/4315251.html
Copyright © 2011-2022 走看看