`
larthas
  • 浏览: 8427 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

前几天关于arguments的学习笔记

阅读更多

关于Arguments对象 About Argument object

最近读书心得,有错误欢迎指正:)

在javascript中,arguments是一个函数对象,表示正在执行的函数和调用他的参数。Arguments有点象数组,但是它不是一个真的数组。所以,他具有length属性,可以代表传递给函数的参数的个数。

这是1.5参考:
The arguments object is a local variable available within all functions; arguments as a property of Function can no longer be used. You can refer to a function's arguments within the function by using the arguments object. This object contains an entry for each argument passed to the function, the first entry's index starting at 0.

例如:

function sayHi()
{
	alert(arguments.lenght); // 0
}

 

按照上面所说的,Arguments类似数组,所以我们可以象使用数组一样使用它。

例如:

function sayHi(num1,num2)
{
	return arguments[0] + arguments[1]; //如果你理解数组的话,我们知道arguments[0]代表第一个参数,[1]代表第二个参数;
}

 

简单来说,argunments表示函数正在传递的参数的集合,但是他是一个特殊的对象,类似数组却不是一个数组。

象上面的例子,其实这样写

 

function sayHi(num1,num2)
{
	return num1 + num2;
}

 

是完全一样的意思的。

通过arguments对象可以获知多少个参数传递给了函数,开发人员可以利用这一点让函数能够接受任意个参数并且实现适当的功能。

例如:

function sayHi()
{
	if(arguments.lenght == 1){
		return argunments[0] + 10;
	}
	else if(arguments.lenght == 2) {
		return argunments[0] + argunments[1];
	}
}
sayHi(1);    // 11;
sayHi(2,3); // 5;

 

通过这个函数,我们可以给函数传递1个或者2个参数,根据条件函数会返回2个不同的值。

而且,arguments对象可以和命名参数一起使用。

上面的函数可以写成:

function sayHi(num1,num2)
{
	if(arguments.lenght == 1){
		return argunments[0] + 10;
	}
	else if(arguments.lenght == 2) {
		return argunments[0] + num2;
	}
}
sayHi(1);    // 11;
sayHi(2,3); // 5;

 

js不会主动为你判断你到底给函数传了多少个参数,如果你多传了,多余的部分就没有被使用,如果你少传了,那么没传的参数值就是undefined

上面的例子,如果你只传递了1个参数num1,那么num2就会保存undefined值。


现在,我们拿Chris的那道题来作例子。

Implement a recursion function that accept two number parameters,
"start" and "end".
Then add up all the numbers between "start" and "end".
Can not invoke functions inside itself, all functions that used in
calculation should be anonymous.
For example:

var abc = function(){
// can not invoke "abc"
var result = (function(){})();
}
===== Chinese Version =====
实现一个匿名函数, 接受两个数字参数, "start" 和 "end", 把 "start" 到 "end" 之间的数 (包括自身) 相加.
不允许在函数内部调用自己, 参与运算的函数均为匿名函数:
var abc = function(){
// 不能直接调用 "abc"
var result = (function(){})();
}

 

 

var sum = function(){ //建立一个匿名函数;
  
  var args = arguments;  
  
  if(args.length !== 2){
    return !1; //判断参数的length
  }
  
  var min = parseInt(args[0], 10), max = parseInt(args[1], 10); //赋值min,max,将第一个第二个参数转换为十进制,如果不是数
  值将会返回NaN
  
  if(!isNaN(min) && !isNaN(max)){ 
    if(min === max){
      return min; 
    }
    
    if(min > max){
      max = [min, min = max][0]; //判断min,max大小,如果min大于max,交换min与max的值;
    }
    
    return min + args.callee.call(null, ++min, max); //循环,每次自身+1,并返回自身,直到max为止
  }
  
  return !isNaN(min) ? min : max; 
    
};

 


关于

var min = parseInt(args[0], 10), max = parseInt(args[1], 10); 

 

parseInt是将一个字符串转换成数值而如果

If the first character cannot be converted to a number, parseInt returns NaN.

For arithmetic purposes, the NaN value is not a number in any radix. You can call the isNaN function to determine if the result of parseInt is NaN. If NaN is passed on to arithmetic operations, the operation results will also be NaN.

这里主要是为了防止传进类似010这样的参数导致变成8进制


关于callee

callee是argument对象的一个属性,常用于匿名函数,它用来在函数内部引用函数本身,这个方法非常有用,特别是你不知道函数名称的时候。

文档中的描述:

callee is a property of the arguments object. It can be used to refer to the currently executing function inside the function body of that function. This is for example useful when you don't know the name of this function, which is for example the case with anonymous functions.

下面是用callee来实现一个阶乘的函数:

 

function create() {  
   return function(n) {  
      if (n <= 1)  
         return 1;  
      return n * arguments.callee(n - 1);  
   };  
}  
  
var result = create()(5); // returns 120 (5 * 4 * 3 * 2 * 1)

 

在这个函数中,在n<=1之前,参数都会被自身重复调用一次,当符合条件时,即最后n小于1只返回1执行。

分享到:
评论

相关推荐

    JVM学习笔记(一)

    ### JVM学习笔记(一) #### 一、JVM概述与工具使用 JVM(Java Virtual Machine)是Java语言的核心组成部分之一,它为Java程序提供了一个跨平台的运行环境。本篇学习笔记主要介绍如何利用一系列工具来查看和监控JVM...

    js学习笔记大全

    if (arguments.length === 0) return c$; if (typeof arg == 'function') return c$.ready(arg); // 有参数则调用获取元素的函数,为 c$.getElement 的缩写 return c$.getElement(arg, dom); }; /** * 这是错误...

    JavaScript学习笔记

    本学习笔记旨在帮助初学者快速掌握JavaScript的核心概念和技术,实现从入门到精通的过渡。 1. **基础语法** - 变量声明:JavaScript支持var、let和const关键字声明变量,理解它们的作用域和提升特性至关重要。 - ...

    javascript学习笔记.docx

    这篇学习笔记主要涵盖了JavaScript的基础语法和客户端JavaScript的相关知识。 1. **JavaScript基本语法**: - **变量声明**:未声明的变量尝试读取时会产生错误,而写入未声明的变量会创建一个全局变量。 - **...

    arguments对象的使用

    在JavaScript编程语言中,`arguments`对象是一个非常重要的特性,特别是在处理函数参数时。它不是一个真正的数组,而是一个类数组对象,提供了访问函数调用时传递的所有参数的途径。无论函数定义了多少个形式参数...

    Javascript学习笔记之函数篇(四):arguments 对象

    关于arguments对象的性能问题,arguments对象的存在本身对性能的影响并不大。然而,使用arguments.callee会带来性能问题。arguments.callee是一个指向正在执行的函数的指针,使用它意味着函数无法进行内联扩展优化,...

    java script 学习笔记

    JavaScript 学习笔记 JavaScript 基础知识 JavaScript 是一种高级的、动态的、基于对象的脚本语言,主要用于客户端的脚本编程。 JavaScript 代码可以嵌入到 HTML 文件中,以便控制浏览器的行为。 JavaScript ...

    JS:arguments

    ### JavaScript中的`arguments`对象详解 在JavaScript编程中,`arguments`对象是一个非常有用的特性,尤其是在处理函数调用时不确定参数数量的情况下。虽然它不是ECMAScript标准的一部分,但所有主流浏览器都支持这...

    前端开源库-arguments-extended

    "arguments-extended"就是一个这样的开源库,专为处理JavaScript中的`arguments`对象提供了一系列实用方法,旨在增强参数操作的灵活性和便利性。 `arguments`对象在JavaScript中是一个特殊的对象,它在函数内部可用...

    我的javascript学习笔记

    根据提供的文件信息,可以看出这份“我的javascript学习笔记”主要涵盖了JavaScript中的几个关键概念和技术要点,包括正则表达式、AJAX以及一些JavaScript的核心语言特性。接下来将这些知识点进行详细的整理和解释。...

    Linux学习笔记.doc

    以上是Linux学习笔记的知识点总结,涵盖了磁盘的分区顺序、账户管理、命令的使用格式、目录查询命令、拷贝命令、日期命令、显示日历命令、显示文件内容命令、帮助命令、命令的语法格式、隐藏文件等多方面的知识点。

    java jdk 5学习笔记

    以下是对这个学习笔记中可能涵盖的知识点的详细解释: 1. **自动装箱与拆箱**: JDK 5引入了自动装箱和拆箱的概念,使得基础类型与对应的包装类之间可以无缝转换。例如,int与Integer,无需手动调用`Integer.value...

    理解Javascript函数形式参数与arguments

    理解Javascript函数形式参数与arguments 在JavaScript中,函数的形式参数和arguments之间存在着微妙的关系。为了深入理解这方面的知识,我们需要首先了解形式参数和实际参数的概念。形式参数指的是定义方法时所明确...

    我的JavascritS学习笔记。

    总之,JavaScript 提供了多种创建函数的方式,以及灵活的 `arguments` 对象,这些特性使得 JavaScript 在函数编程方面具有高度的灵活性和表现力。通过深入理解和熟练运用这些知识,可以编写出更加高效和富有创意的...

    A Rulebook for Arguments

    书中主要分为几个部分,首先是关于如何撰写简短论证的一般规则,然后分别介绍通过举例论证、类比论证、权威论证和关于因果关系的论证以及演绎论证。最后,在第七部分中,作者探讨了如何撰写一篇论证性论文。 以下是...

    2009 达内Unix学习笔记

    把前一命令的输出作为后一命令的输入,把几个命令连接起来。 |经常跟tee连用,tee 把内容保存到文档并显示出来。 三、通用后接命令符 -a 所有(all)。 -e 所有(every),比a更详细。 -f 取消保护。 -i 添加...

    前端学习笔记-黑马程序员JS

    "前端学习笔记-黑马程序员JS" 本资源主要介绍了 JavaScript 的基本概念和语法,包括变量、数据类型、运算符、流程控制、数组、函数、对象、内置对象等知识点。 变量 在 JavaScript 中,变量可以在三种位置书写:...

Global site tag (gtag.js) - Google Analytics