zoukankan      html  css  js  c++  java
  • JS学习 函数的理解

    ECMAScript 的函数实际上是功能完整的对象。

    函数的理解

    用 Function 类直接创建函数,格式如下。可理解为Function构造器。

    var function_name = new Function(arg1, arg2, ..., argN, function_body)

    通过Function类定义一个函数

    var sayHi = new Function("sName", "sMessage", "alert("Hello " + sName + sMessage);");

    出于效率原因我们一般不这么写。而采用下面的写法

    function sayHi(sName, sMessage) {
      alert("Hello " + sName + sMessage);
    }

    但我们只要知道所有函数都应看作 Function 类的实例函数名只是指向函数对象的引用值,行为就像其他对象一样。

    怎么理解行为?函数默认有length属性,跟其他对象一样默认也有valueOf() 方法及 toString() 方法。

    函数的定义

    定义函数有多种方式,大致分两类,声明式和表达式

    1. 最普通的,以function开头

    function foo(a, b){
       return a+b;
    }

    2. 将函数表达式赋值给一个变量

    var foo = function (a, b){
       return a+b;
    }

    立即执行表达式

    (function(){
      // do sth
    })()

    将函数对象作为表达式返回

    return function(){
      // do sth
    }

    命名的函数表达式

    var add = function foo(a, b){
     // do sth
    };

    函数声明和函数表达式的差异

    如下图:使用函数声明可正确的输出结果3,但是用函数表达式定义的函数结果是undefined。

     

    原因是,当JS执行之前。解析器会读取函数声明添加到执行环境中。对代码求值时,JS引擎在第一遍会声明函数并将它们放到源代码树的顶部。就好像先执行了function add(), 然后才执行了 var number = add()。函数被提前了。

    同样的函数表达式也会被提前,也就是var add被提前,但是值是undefined。这里将undefined像函数那样去调用就报了“undefined is not a function”。

  • 相关阅读:
    traceroute原理
    IP转发和子网路由
    Dijkstra算法
    String源码学习
    多线程的参数传递
    hbase参数配置优化
    hadoop 点点滴滴(一)
    Win8安装教程!笔记本用U盘安装Win8只需三步
    CentOS 6.4下编译安装MySQL 5.6.14
    Nginx配置文件说明
  • 原文地址:https://www.cnblogs.com/mafeifan/p/3284587.html
Copyright © 2011-2022 走看看