Javascript 的 arguments 参 数

  arguments 参数是调用函数时传递给函数的所有显式参数的集合。它通过隐式的方式传递到函数内部。

  这个arguments 对象是一个拥有长度和可以以索引的方式取单个的参数的类似于数组的集合,它并不是一个真正的数组,因为它无法调用数组的方法(sort等)。

  在JavaScript的非严格模式下,arguments 对象作为函数parameters的别名,修改arguments对象会引起对应的函数参数(function parameter)的值发生改变。

这就是说,如果修改arguments[0],函数的第一个参数(parameter)的值也会改变,如下所示:

function infiltrate(person) {
  assert(person === ‘gardener‘,
    ‘The person is a gardener‘);
  assert(arguments[0] === ‘gardener‘,
    ‘The first argument is a gardener‘);
  arguments[0] = ‘ninja‘;
  assert(person === ‘ninja‘,
    ‘The person is a ninja now‘);
  assert(arguments[0] === ‘ninja‘,
    ‘The first argument is a ninja‘);
  person = ‘gardener‘;
  assert(person === ‘gardener‘,
    ‘The person is a gardener once more‘);
  assert(arguments[0] === ‘gardener‘,
    ‘The first argument is a gardener again‘);
}

infiltrate("gardener");

  调用函数infiltrate时,arguments[0]和参数person的值都是‘gardener‘,当把arguments[0]赋值为‘ninja‘时,person的值也变成了‘ninja‘;再次把person的值改为‘gardener‘时,arguments[0]的值跟着变回‘gardener‘。

  由于把arguments对象作为函数参数的别名使用会引起迷惑,所以JavaScript提供了一种方式来禁止这样做——严格模式

 

"use strict";

function infiltrate(person){
  assert(person === ‘gardener‘,‘The person is a gardener‘);
  assert(arguments[0] === ‘gardener‘, ‘The first argument is a gardener‘);
  arguments[0] = ‘ninja‘;
  assert(arguments[0] === ‘ninja‘,‘The first argument is now a ninja‘);
  assert(person === ‘gardener‘,‘The person is still a gardener‘);
}

infiltrate("gardener");

使用严格模式后,在执行arguments[0] = ‘ninja‘时,只改变了arguments[0]的值,person的值不会发生改变,还是原来的"gardener"。

时间: 2024-12-29 06:37:30

Javascript 的 arguments 参 数的相关文章

JavaScript学习记录day5-函数的定义和调用

JavaScript学习记录day5-函数的定义和调用 [TOC] 1. 定义函数 在JavaScript中,定义函数的方式如下: function abs(x) { if (x >= 0) { return x; } else { return -x; } } 上述abs()函数的定义如下: function指出这是一个函数定义:abs是函数的名称:(x)括号内列出函数的参数,多个参数以,分隔:{ ... }之间的代码是函数体,可以包含若干语句,甚至可以没有任何语句.请注意,函数体内部的语句在

读javascript高级编程03-函数表达式、闭包、私有变量

一.函数声明和函数表达式 定义函数有两种方式:函数声明和函数表达式.它们之间一个重要的区别是函数提升. 1.函数声明会进行函数提升,所以函数调用在函数声明之前也不会报错: test(); function test(){ alert(1); } 2.函数表达式不会进行函数提升,函数调用在函数声明之前的话会报错: test(); // test is not a function var test=function(){ alert(1); } 二.递归函数 递归函数是通过在函数内部调用自身实现的

[译]Javascript 参数(arguments)对象

本文翻译youtube上的up主kudvenkat的javascript tutorial播放单 源地址在此: https://www.youtube.com/watch?v=PMsVM7rjupU&list=PL6n9fhu94yhUA99nOsJkKXBqokT3MBK0b Javascript 参数(arguments)对象是一个在所有函数中都可用的本地变量.其包含了所有传给函数的参数,并且像数列一样排着序.参数对象的长度就是传给函数的参数个数. JavaScript 参数对象例子: fu

利用JavaScript打印出Fibonacci数(不使用全局变量)

从汤姆大叔的博客里看到了6个基础题目:本篇是第4题 - 利用JavaScript打印出Fibonacci数(不使用全局变量) 解题关键: 1.Fibonacci数列的规律 2.递归 解点1:Fibonacci数列的规律 1,1,2,3,5,6,13,19,32.... //从第3项开始,每项都是前两项之和 解点2:递归 递归是一个复杂的概念,此题可以不用递归解决,但题目要求不能使用全局变量,所以我只能想到递归方法.简单的说,递归就是函数调用函数本身,但递归一定要有一个出口,否则就无限调用下去……

javascript的arguments对象简单介绍

javascript的arguments对象简单介绍:这里以最简单的方式介绍一下arguments对象的用法,先看一段代码: var a=1; var b=2; function mytest(a,b){ var c=a+b; document.write(arguments[0]); } mytest(1,2); 以上代码可以输出传递给函数的第一个参数,也就是说通过类似于数组的索引值可以访问传递给函数的参数,而无需使用参数的名称.这里就介绍这么多了,希望能够给初学者一个最初的理解. 原文地址是

F?l?a?s?h? ?M?e?d?i?a? ?L?i?v?e? ?E?n?c?o?d?e?r?参?数?表

Flash Media Live Encoder命令行推流Flash Media Live Encoder NotesFlash Media Live Encoder 除了直接以 GUI 方式操作之外还能透过 Command Line 呼叫 FMLECmd 方式控制以下则是简单的笔记 大部分 FMLECmd 操作都是需要一个 fmle_uid 参数的fmle_uid 用来表示一个 encoding session fmle_uid 格式定义假如是 rtmp streamingfmle_uid =

javascript 中 arguments.callee属性

javascript 中 arguments.callee属性 可以在函数内部,指向的是这个函数(或者叫做“类”)本身. 相当于PHP 中的 self 关键字. The arguments.callee property contains the currently executing function. Description callee is a property of the arguments object. It can be used to refer to the current

addEventListener中的第三个参 数

addEventListener中的第三个参 数是useCapture, 一个bool类型.当为false时为冒泡获取(由里向外),true为为捕获 capture方式(由外向里). function addEvent(obj,sEv,fn){ if(obj.addEventListener){ obj.addEventListner(sEv,fn,false); }else{ obj.attatchEvent('on'+sEv,fn); } } <!doctype html> <htm

javaScript的arguments传参数

javaScript中的函数中,可以通过arguments数组获取参数,进行调用. 函数中未定义传参的情况下,外部可以传入多个参数. 使用方法: function func(a){ console.log(arguments[2]) } func(2,5,7);//打印7 func(2,5);//打印 undefined