`
liugang594
  • 浏览: 990689 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JavaScript中的函数

 
阅读更多

  几个要点:

  1. 不能指定传入参数的类型,可以使用typeof进行检测
  2. 参数个数不会被检测,如果传入的参数过多,则多余的参数被忽略;传入过少,则剩余参数设为undefined.
  3. 函数可以嵌套函数,但是只参在函数的最顶层。
  4. 函数直接量:未命名函数。例如:
    var f = function(x){return x*x;};
     或:
    var f = function fact(x) { if (x<=1) return 1; return x * fact(x-1);};
    
    注意到 fact在外部没法再访问,只是用于实现递归调用。
  5. 可变长度参数列表: Arguments对象
    在函数内,arguments标识符具有特殊含义,它表示参数列表对象,类似于数组,可以用来获取传入的参数值。例如:
        f("aa","bbb","ccc");
        function f(){
            var length = arguments.length;
            for(var i = 0;i<length;i++){
                document.writeln(arguments[i]);
            }
        }
     其中如果函数定义了参数,例如f(x,y){};则arguments[0]=x, arguments[1]=y。
    注:注意如果定义了同名的变量,则arguments会被隐藏。
  6. arguments的另一个属性callee,用来引用当前函数。
  7. 函数可以看作是一种特殊的变量,可以把函数赋值一个变量或属性,而功能不变化。例如:
    var o = new Object;
    o.square = function(x) {return x*x;};
    y = o.square(16);
    
    var a = function(x) {return x*x;};
    
  8. 作为对象的一个方法时,用this引用当前对象;如果是函数则引用全局对象
  9. 构造函数:后面再介绍

二、函数的属性和方法

 

函数的typeof运算结果返回"function",证明函数是一种特殊的数据类型。因此它和对象一样,具有属性和方法。

 

1. length属性: 只读属性,返回函数定义中形参个数,与实际传入参数无关;且该属性在函数内外都可使用。例如:

    document.write("</br>Outside: "+a.length);
    a();
    function a(a, b, c){
        document.write("</br>Inside: "+Function.length);
    }

 

2. prototype属性:后面再介绍

 

 

3. 自定义函数属性

 

因为函数也可以看成一种对象,因此可以给它定义变量,例如:

uniqueIngeger.counter = 0;

function uniqueInteger(){
  return uniqueInteger.counter++;
}
 

4. apply()和call()方法

 

f.call(o, 1, 2 );
 

相似于:

 

o.m = f;
o.m(1, 2);
delete o.m;
 

apply与call相似,只不过传递给函数的参数由数组指定:

 

f.apply(o, [1, 2]);

 

对象o可以是空,例如: Math.max.apply(null, array_of_numbers);

 

三. 函数作用域和闭包

 

JavaScript函数是将要执行的代码以及这些代码的作用域构成的一个综合体,在计算机科学术语中,这种代码和作用域的综合体叫做闭包。所有的JavaScript函数都是闭包。

 

例如,想编写一个能够通过记住一个值的函数,一种简单的实现是使用函数的变量:

 

uniqueID = function(){
      if(!argument.callee.id) argument.callee.id = 0;
      return argument.callee.id++;
};

 

每次调用的时候,返回的id值都加1, 但是并不能阻止有人直接对id赋值,例如: uniqueID.id = 0;

 

要解决此类问题,可以使用闭包:

 

uniqueID = (function(){
        var id = 0;
        return function() { return id ++;};
}) ();

 

这里uniqueID引用的是内部返回的函数,并且此函数引用的值是定义有外层函数中,因此不会被uniqueID修改。

 

 

四、Function()构造函数

 

可以使用Function构造函数来创建一个函数的例子,例如:

 

var f = new Function("x", "y", "return x*y;");
 

上例创建了一个新的函数,它类似于:

 

function f(x, y){return x*y;}
 

Function构造函数的特点:

  • Function构造函数允许JavaScript代码被动态的创建并且在运行时编译,例如全局的eval()函数
  • Function构造函数解析函数体,并且每次调用的时候都创建一个新的函数对象。
  • 最后,关于Function函数非常重要的一点就是:它所创建的函数并不使用词法作用域,相反,它们总是当作顶层的函数一样来编译。

 

 

 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    JavaScript中函数对象调用模式总结

    JavaScript中的函数对象调用模式是编程中至关重要的概念,它涉及到函数作为一等公民、作用域、闭包、原型链等多个核心知识点。这篇博客通过深入分析JavaScript中的函数调用模式,帮助开发者更好地理解和掌握这些概念...

    JavaScript中函数与对象的解析.pdf

    JavaScript 中函数与对象的解析 JavaScript 中的函数与对象是掌握 JavaScript 语 言的基础。JavaScript 语 言与 C++、Java 等语 言在语法上类似,但其函数具有独特性。本文将深入了解 JavaScript 语言中的函数与...

    理解JavaScript中函数的使用

    ### 理解JavaScript中函数的使用 在现代软件开发中,JavaScript已成为不可或缺的一部分,尤其在Web前端领域更是举足轻重。对于开发者而言,掌握JavaScript中的函数使用至关重要,因为函数是实现模块化编程的基础之...

    一本关于JavaScript中函数式编程的书

    这在递归函数中特别有用,可以提高性能。 八、函数式库 JavaScript有许多函数式编程库,如Ramda和Lodash的FP模式,它们提供了丰富的函数式工具,简化了编写函数式代码的过程。 九、惰性求值 虽然JavaScript本身不...

    【JavaScript源代码】Javascript中函数分类&this指向的实例详解.docx

    在这个例子中,每个按钮的点击事件都会打印出自己的索引号,而不是最后一个按钮的索引号,这是因为`bind`改变了事件处理函数中的`this`指向。 #### 五、结论 通过本文的讲解和示例,我们可以看到JavaScript中的...

    JavaScript的函数式编程基础指南

    这些函数可以被传递给其他函数,例如在高阶函数中,也可以作为其他函数的结果返回。这种能力使得JavaScript具备了函数式编程的基本特征。 其次,JavaScript支持词法作用域和闭包,这是函数式编程中重要的概念。闭包...

    JavaScript: 函数与作用域深入解析及应用场景

    内容概要:本文详细介绍了 JavaScript 中的函数与作用域。首先解释了函数的基本概念,包括函数声明、函数表达式、匿名函数、箭头函数、函数参数与返回值。接着讨论了 JavaScript 中的全局作用域、局部作用域、块级...

    Javascript中的函数.pdf

    在JavaScript编程中,函数是构成应用程序逻辑的基本构件。理解JavaScript中函数的概念对于编写有效和高效的代码至关重要。以下知识点是基于提供的文件信息进行详细解释。 一、执行环境 执行环境是JavaScript中一个...

    JavaScript函数式编程.pdf

    不过,由于【标题】中提供了文档的名称——"JavaScript函数式编程.pdf",我可以根据这个名称扩展出关于JavaScript函数式编程的知识点。 JavaScript函数式编程的知识点非常丰富,涉及很多方面的内容,下面将详细介绍...

    javascript_函数大全

    在深入探讨JavaScript函数的广泛应用与特性之前,让我们首先明确一点:JavaScript函数不仅是编程语言中的核心组件,更是实现复杂逻辑、封装功能模块的关键所在。不同于许多传统面向对象的语言,JavaScript通过其独特...

    javascript函数式编程

    JavaScript函数式编程是一种编程范式,它强调将计算视为数据处理的过程,并且重视函数作为第一类公民,即函数可以作为...阅读相关书籍,例如"javascript函数式编程",将帮助你更好地掌握这些概念并应用于实际项目中。

    JAVASCRIPT函数之高阶函数.pdf

    在本文档中,提到的核心知识点是关于JavaScript中的高阶函数。高阶函数是指至少满足下列一个条件的函数:它可以接受一个或多个函数作为参数,也可以返回一个函数。下面将详细解释与高阶函数相关的几个关键概念。 ...

    javascript中函数的写法实例代码详解

    1. JavaScript函数的基本写法 JavaScript函数可以通过function关键字来定义。基本语法结构如下: ```javascript function 函数名() { // 函数体 } ``` 例如: ```javascript function myFunction() { console.log...

    javascript指南和函数式编程

    而《JavaScript函数式.zip》可能是一份关于JavaScript函数式编程的资料集合,函数式编程是一种编程范式,强调使用函数和避免改变状态。其中可能涵盖以下知识点: 1. **纯函数**:理解纯函数的定义,即给定相同的...

    C#与JAVASCRIPT函数的相互调用 C#调用JAVASCRIPT函数的调用 JAVASCRIPT调用C#函数的调用

    C#与JAVASCRIPT函数的相互调用 C#调用JAVASCRIPT函数的调用 JAVASCRIPT调用C#函数的调用

    JavaScript中函数表达式和函数声明及函数声明与函数表达式的不同

    JavaScript中函数表达式和函数声明是创建函数的两种基本方式,它们在语法和行为上有所区别。函数声明(Function Declaration)和函数表达式(Function Expression)的不同之处在于它们在代码中的处理方式和使用时机...

    JavaScript之函数(ppt)

    JavaScript之函数(ppt)JavaScript之函数(ppt)JavaScript之函数(ppt)JavaScript之函数(ppt)JavaScript之函数(ppt)JavaScript之函数(ppt)JavaScript之函数(ppt)JavaScript之函数(ppt)JavaScript之函数...

    了解Javascript中函数作为对象的魅力

    JavaScript中的函数作为对象是语言设计的一个独特特性,它赋予了函数更多的灵活性和强大的功能。首先,函数在JavaScript中是第一类对象,这意味着它们可以像普通对象一样被赋值给变量、作为参数传递以及作为返回值。...

    javascript实现根据函数名称字符串动态执行函数的方法示例

    在JavaScript编程中,有时会遇到需要根据函数名的字符串形式来动态执行对应函数的场景。这类技术能够提供一种灵活的方式来执行代码,尤其在进行插件化开发、事件驱动编程或实现钩子函数时非常有用。为了实现这一功能...

Global site tag (gtag.js) - Google Analytics