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

  • 相关阅读:
    Find the Smallest K Elements in an Array
    Count of Smaller Number
    Number of Inversion Couple
    Delete False Elements
    Sort Array
    Tree Diameter
    Segment Tree Implementation
    Java Programming Mock Tests
    zz Morris Traversal方法遍历二叉树(非递归,不用栈,O(1)空间)
    Algorithm about SubArrays & SubStrings
  • 原文地址:https://www.cnblogs.com/liweiwei1419/p/4315251.html
Copyright © 2011-2022 走看看