浅谈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 相关文章推荐
JavaScript窗口功能指南之在窗口中书写内容
Jul 21 Javascript
Prototype使用指南之array.js
Jan 10 Javascript
超级简单的图片防盗(HTML),好用
Apr 08 Javascript
关于innerHTML后丢失动态绑定的EVENT问题解决方法
May 19 Javascript
Javascript学习笔记之相等符号与严格相等符号
Nov 23 Javascript
Node.js中调用mysql存储过程示例
Dec 20 Javascript
Jquery中的$.each获取各种返回类型数据的使用方法
May 03 Javascript
用js实现before和after伪类的样式修改的示例代码
Sep 07 Javascript
Vue-Router实现组件间跳转的三种方法
Nov 07 Javascript
vue-awesome-swiper 基于vue实现h5滑动翻页效果【推荐】
Nov 08 Javascript
js时间戳转yyyy-MM-dd HH-mm-ss工具类详解
Apr 30 Javascript
使用React代码动态生成栅格布局的方法
May 24 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中strtotime函数用法详解
2014/11/15 PHP
简要剖析PHP的Yii框架的组件化机制的基本知识
2016/03/17 PHP
PHP命名空间定义与用法实例分析
2019/08/14 PHP
Opacity.js
2007/01/22 Javascript
点图片上一页下一页翻页效果
2008/07/09 Javascript
改进版通过Json对象实现深复制的方法
2012/10/24 Javascript
javascript删除数组元素并且数组长度减小的简单实例
2014/02/14 Javascript
JavaScript中的getDay()方法使用详解
2015/06/09 Javascript
JS禁用页面上所有控件的实现方法(附demo源码下载)
2015/12/17 Javascript
用JS生成UUID的方法实例
2016/03/30 Javascript
jQuery插件passwordStrength密码强度指标详解
2016/06/24 Javascript
使用ReactJS实现tab页切换、菜单栏切换、手风琴切换和进度条效果
2016/10/17 Javascript
基于bootstrap的选择框插件icheck
2016/12/23 Javascript
微信小程序loading组件显示载入动画用法示例【附源码下载】
2017/12/09 Javascript
浅谈VUE监听窗口变化事件的问题
2018/02/24 Javascript
解决betterScroll在vue中存在图片时,出现拉不动的问题
2018/09/27 Javascript
更优雅的微信小程序骨架屏实现详解
2019/08/07 Javascript
微信小程序拖拽排序列表的示例代码
2020/07/08 Javascript
vue项目配置同一局域网可使用ip访问的操作
2020/10/23 Javascript
JavaScript如何操作css
2020/10/24 Javascript
[01:06:12]VP vs NIP 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python根据距离和时长计算配速示例
2014/02/16 Python
Python线程详解
2015/06/24 Python
Python中time模块与datetime模块在使用中的不同之处
2015/11/24 Python
python PyAutoGUI 模拟鼠标键盘操作和截屏功能
2019/08/04 Python
Python任务调度模块APScheduler使用
2020/04/15 Python
如何使用 Python 读取文件和照片的创建日期
2020/09/05 Python
Python+logging输出到屏幕将log日志写入文件
2020/11/11 Python
英国床垫在线:Mattress Online
2016/12/07 全球购物
大学生求职自我评价
2014/01/16 职场文书
什么样的创业计划书可行性高?
2014/02/01 职场文书
党员批评与自我批评
2014/02/12 职场文书
公司年底活动方案
2014/08/17 职场文书
2014年学校体育工作总结
2014/12/08 职场文书
护士长2015年终工作总结
2015/04/24 职场文书
青年联谊会致辞
2015/07/31 职场文书