js 函数的参数 问题 arguments对象 及闭包
来源:互联网 发布:linux 视频点播服务器 编辑:程序博客网 时间:2024/05/18 03:15
js 参数的传递 是按值传递,在函数内部对变量所做的操作,不会影响到外部的变量。但是如果传递的是复合类型的对象,在内部对其属性所做的操作,则会影响外部对象,这是按址传递。
例如
var a = [1,2,3];function f(a){ a[0]=4;}f(a); // 结果[4,2,3]alert(a);
如果想要对按值传递的参数在函数内部对其所做的操作影响到外部变量,可以将其写成全局对象的属性
例如
var a = 1;function f(p){ window[p]=2;}f('a');a // 2
如果定义函数时候,参数名字全部取相同的名字,而函数内部取值的时候以最后一个为准,哪怕,最后一个都没有传递进来
例如
function f(a, a){ console.log(a);}f(1,2)// 2f(1)//undefined
如果想获取同名参数的第一个怎么办?可以借助arguments对象来实现 ,因为js允许不定数量的参数,所以需要在函数内部读取所有参数,那么arguments对象就应运而生,并且只能在函数内部使用。
console.log(arguments[0]);
除了读取参数外,能为参数进行赋值吗?答案是可以的,不过一般不建议这么做,没有意义,实参本来就是想传进来的值,干嘛还要更改其值那?
还可以通过arguments对象的length属性查看函数调用时候传递几个参数,可以跟函数的length做个比较,函数的length属性查看声明是声明了几个参数,arguments队形的length属性则可以查看传参时候实际传几个参数进来
例如
function f(a, b){ arguments[0]=2; arguments[1]=3; console.log(arguments.length);}f(1,2,3); //3f(1); //1f(); //0console.log(f.length); // 2
arguments.<span style="color: rgb(255, 0, 0);">callee </span>// f
闭包(closure)就是定义在函数体内部的函数。更理论性的表达是,闭包是函数与其生成时所在的作用域对象(scope object)的一种结合。
function f() { var c = function (){}; }
上面的代码中,c是定义在函数f内部的函数,就是闭包。
闭包的特点在于,在函数外部可以读取函数的内部变量。
function f() { var v = 1; var c = function (){ return v; }; return c;}var o = f();o();// 1
上面代码表示,原先在函数f外部,我们是没有办法读取内部变量v的。但是,借助闭包c,可以读到这个变量。
闭包不仅可以读取函数内部变量,还可以使得内部变量记住上一次调用时的运算结果。
function createIncrementor(start) { return function () { return start++; }}var inc = createIncrementor(5);inc() // 5inc() // 6inc() // 7
上面代码表示,函数内部的start变量,每一次调用时都是在上一次调用时的值的基础上进行计算的。
关于js的apply()和call()方法用法的文章 请查阅http://blog.csdn.net/business122/article/details/8000676 0 0
- js 函数的参数 问题 arguments对象 及闭包
- js函数参数对象arguments对象分析
- 【JS--基础--函数】--隐含参数对象arguments的callee 属性
- JS函数的参数(arguments)的使用
- JS函数的参数(arguments)的使用
- JS函数的参数(arguments)的使用
- 函数的实际参数:Arguments对象
- javascript函数参数的arguments对象
- js、函数、对象、arguments
- js加强:js引擎,变量作用域,arguments对象,特殊函数,闭包
- EXT传递参数的问题 js函数的参数传递(arguments)
- js中函数命名参数和arguments对象
- 使用js内置对象arguments求函数的所有参数的和
- 【javascript】高级js--(面向对象js,arguments,闭包,自调)
- JS的arguments对象
- js 的 arguments 对象
- js的arguments对象
- JavaScript中函数的arguments对象(不确定函数参数)
- WinXp安装Oracle 11g Express Edition
- 多任务与AD转换
- [leetcode] Word Ladder
- Jetty 9.3庆祝20周年生日快乐,并增加HTTP/2支持
- ITMS-SERVICES://方式安装IPA在IOS 7.1中的变化
- js 函数的参数 问题 arguments对象 及闭包
- linux入门
- Hadoop文件系统之上传下载文件
- 黑马程序员——Java中IO流笔记(上)
- 2015年6月27日 课设日志
- spring mvc使用MultiActionController时发生No request handling method with name的错误
- linux之ssl连接mysql以及主从配置
- Genymation怎样设置联网
- 第3天-sql基本检索与数据过滤