浅谈JavaScript函数参数的可修改性问题


Posted in Javascript onDecember 05, 2013

一道笔试题思考而来的,通常情况下没人会在函数内部修改参数值。这里仅拿出来讨论,有三种方式可以修改。

1,直接修改函数声明时的形参

function f1(a) { 
    alert(a); 
    a = 1;//修改形参a 
    alert(1 === a); 
    alert(1 === arguments[0]); 
} 
f1(10);

函数f1定义了参数a,调用时传参数10,先弹出10,修改a为1,弹出两次true,a和arguments[0]都为1了。

2,通过函数内部的arguments对象修改

function f2(a) { 
    alert(a); 
    arguments[0] = 1;//修改arguments 
    alert(1 === a); 
    alert(1 === arguments[0]); }

效果同函数f1。

3,函数内部声明的局部变量与形参同名

function f3(a) { 
    alert(a); 
    var a = 1;//声明局部变量a且赋值为1 
    alert(1 === a); 
    alert(arguments[0]); 
} 
f3(10);

函数f3定义了形参a,函数内部声明局部变量a同时赋值为1,但这里的a仍然是参数a,从最后弹出的arguments[0]被修改为1可以证明。

4,如果只是声明局部变量a,却不赋值,情况又不一样了

function f3(a) { 
    var a;//仅声明,不赋值 
    alert(a); 
    alert(arguments[0]); 
} 
f3(10);

这时候弹出的都是10,而不是undefined。
Javascript 相关文章推荐
jQuery 常见开发使用技巧总结
Dec 26 Javascript
js ondocumentready onmouseover onclick onmouseout 样式
Jul 22 Javascript
url地址自动加#号问题说明
Aug 21 Javascript
JavaScript 更严格的相等 [译]
Sep 20 Javascript
基于jquery的文章中所有图片width大小批量设置方法
Aug 01 Javascript
解析JSON对象与字符串之间的相互转换
Dec 18 Javascript
一个仿糯米弹框效果demo
Jul 22 Javascript
基于编写jQuery的无缝滚动插件
Aug 02 Javascript
谈谈JavaScript数组常用方法总结
Jan 24 Javascript
Javascript实现从小到大的数组转换成二叉搜索树
Jun 13 Javascript
JS实现点击循环切换显示内容的方法
Oct 19 Javascript
使用JS前端技术实现静态图片局部流动效果
Aug 05 Javascript
浅析JavaScript中的隐式类型转换
Dec 05 #Javascript
浅析JavaScript中两种类型的全局对象/函数
Dec 05 #Javascript
完美解决IE低版本不支持call与apply的问题
Dec 05 #Javascript
JavaScript子类用Object.getPrototypeOf去调用父类方法解析
Dec 05 #Javascript
jQuery表格插件ParamQuery简单使用方法示例
Dec 05 #Javascript
各浏览器对document.getElementById等方法的实现差异解析
Dec 05 #Javascript
给事件响应函数传参数的四种方式小结
Dec 05 #Javascript
You might like
PHP中的正规表达式(一)
2006/10/09 PHP
那些年一起学习的PHP(三)
2012/03/22 PHP
php-fpm服务启动脚本的方法
2018/04/27 PHP
js获取url中指定参数值的示例代码
2013/12/14 Javascript
容易造成JavaScript内存泄露几个方面
2014/09/04 Javascript
Javascript+CSS实现影像卷帘效果思路及代码
2014/10/20 Javascript
全面了解JavaScript的数据类型转换
2016/07/01 Javascript
浅析Javascript ES6新增值比较函数Object.is
2016/08/24 Javascript
Jquery AJAX POST与GET之间的区别详细介绍
2016/10/17 Javascript
vue.js移动端tab组件的封装实践实例
2017/06/30 Javascript
JavaScript选取(picking)和反选(rejecting)对象的属性方法
2017/08/16 Javascript
如何将你的AngularJS1.x应用迁移至React的方法
2018/02/01 Javascript
vue数据控制视图源码解析
2018/03/28 Javascript
服务端预渲染之Nuxt(使用篇)
2019/04/08 Javascript
今天,小程序正式支持 SVG
2019/04/20 Javascript
JavaScript canvas实现跟随鼠标移动小球
2021/02/09 Javascript
Windows下用py2exe将Python程序打包成exe程序的教程
2015/04/08 Python
在Python的列表中利用remove()方法删除元素的教程
2015/05/21 Python
python3 pillow生成简单验证码图片的示例
2017/09/19 Python
Windows 7下Python Web环境搭建图文教程
2018/03/20 Python
python进行两个表格对比的方法
2018/06/27 Python
三步解决python PermissionError: [WinError 5]拒绝访问的情况
2020/04/22 Python
Django 解决由save方法引发的错误
2020/05/21 Python
Python RabbitMQ实现简单的进程间通信示例
2020/07/02 Python
移动端html5 meta标签的神奇功效
2016/01/06 HTML / CSS
AmazeUI 图标的示例代码
2020/08/13 HTML / CSS
Notino芬兰:购买香水和化妆品
2019/04/15 全球购物
美国儿童珠宝在线零售商:Loveivy
2019/05/22 全球购物
英国领先的高级美容和在线皮肤诊所:Face the Future
2020/06/17 全球购物
中专毕业生自我鉴定
2013/11/21 职场文书
教师批评与自我批评发言稿
2014/10/15 职场文书
群众路线教育实践活动整改方案(个人版)
2014/10/25 职场文书
员工工作能力评语
2014/12/31 职场文书
考研复习计划
2015/01/19 职场文书
2016年5月份红领巾广播稿
2015/12/21 职场文书
VUE递归树形实现多级列表
2022/07/15 Vue.js