zoukankan      html  css  js  c++  java
  • 【ECMAScript5】函数

    一、arguments 对象

    在函数代码中,使用特殊对象 arguments,开发者无需明确指出参数名,就能访问它们。

    可以用 arguments 对象检测函数的参数个数,引用属性 arguments.length 即可。

    二、Function对象

    Function 类可以表示开发者定义的任何函数。

    用 Function 类直接创建函数的语法如下:

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

    在上面的形式中,每个 arg 都是一个参数,最后一个参数是函数主体(要执行的代码)。这些参数必须是字符串。

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

    可以这样定义:

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

    虽然由于字符串的关系,这种形式写起来有些困难,但有助于理解函数只不过是一种引用类型,它们的行为与用 Function 类明确创建的函数行为是相同的。

    下面这个例子:

    function doAdd(iNum) {
      alert(iNum + 20);
    }
    
    function doAdd(iNum) {
      alert(iNum + 10);
    }
    
    doAdd(10);    //输出 "20"

    如你所知,第二个函数重载了第一个函数,使 doAdd(10) 输出了 "20",而不是 "30"。

    如果以下面的形式重写该代码块,这个概念就清楚了:

    var doAdd = new Function("iNum", "alert(iNum + 20)");
    var doAdd = new Function("iNum", "alert(iNum + 10)");
    doAdd(10);

    请观察这段代码,很显然,doAdd 的值被改成了指向不同对象的指针。函数名只是指向函数对象的引用值,行为就像其他对象一样。甚至可以使两个变量指向同一个函数:

    var doAdd = new Function("iNum", "alert(iNum + 10)");
    var alsodoAdd = doAdd;
    doAdd(10);    //输出 "20"
    alsodoAdd(10);    //输出 "20"

    在这里,变量 doAdd 被定义为函数,然后 alsodoAdd 被声明为指向同一个函数的指针。用这两个变量都可以执行该函数的代码,并输出相同的结果 - "20"。因此,如果函数名只是指向函数的变量,那么可以把函数作为参数传递给另一个函数吗?回答是肯定的!

    function callAnotherFunc(fnFunction, vArgument) {
      fnFunction(vArgument);
    }
    
    var doAdd = new Function("iNum", "alert(iNum + 10)");
    
    callAnotherFunc(doAdd, 10);    //输出 "20"

    注意:尽管可以使用 Function 构造函数创建函数,但最好不要使用它,因为用它定义函数比用传统方式要慢得多。不过,所有函数都应看作 Function 类的实例。

    1. Function对象的length属性

    定义的属性 length 声明了函数期望的参数个数

    2. Function对象的方法

    valueOf() 方法和 toString() ,返回的是函数的源代码。

    三、闭包

    闭包指的是:能够访问另一个函数作用域的变量的函数。清晰的讲:闭包就是一个函数,这个函数能够访问其他函数的作用域中的变量。

    function outer() {
         var  a = '变量1'
         var  inner = function () {
                console.info(a)
         }
        return inner    // inner 就是一个闭包函数,因为它能够访问到outer函数的作用域
    }
  • 相关阅读:
    各国语言缩写列表,各国语言缩写-各国语言简称,世界各国域名缩写
    How to see log files in MySQL?
    git 设置和取消代理
    使用本地下载和管理的免费 Windows 10 虚拟机测试 IE11 和旧版 Microsoft Edge
    在Microsoft SQL SERVER Management Studio下如何完整输出NVARCHAR(MAX)字段或变量的内容
    windows 10 x64系统下在vmware workstation pro 15安装macOS 10.15 Catelina, 并设置分辨率为3840x2160
    在Windows 10系统下将Git项目签出到磁盘分区根目录的方法
    群晖NAS(Synology NAS)环境下安装GitLab, 并在Windows 10环境下使用Git
    使用V-2ray和V-2rayN搭建本地代理服务器供局域网用户连接
    windows 10 专业版安装VMware虚拟机碰到的坑
  • 原文地址:https://www.cnblogs.com/myitnews/p/12187428.html
Copyright © 2011-2022 走看看