浅谈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 相关文章推荐
ext 同步和异步示例代码
Sep 18 Javascript
40个有创意的jQuery图片和内容滑动及弹出插件收藏集之二
Dec 31 Javascript
JavaScript中的变量声明早于赋值分析
Mar 01 Javascript
让元素在网页中可拖动示例代码
Aug 13 Javascript
非常优秀的JS图片轮播插件Swiper的用法
Jan 03 Javascript
vue中SPA单页面应用程序详解
Nov 07 Javascript
JavaScript中关于class的调用方法
Nov 28 Javascript
JS实现前端页面的搜索功能
Jun 12 Javascript
angular 未登录状态拦截路由跳转的方法
Oct 09 Javascript
小程序实现上下移动切换位置
Sep 23 Javascript
小程序调用微信支付的方法
Sep 26 Javascript
Node.js 深度调试方法解析
Jul 28 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
便携利器 — TECSUN PL-365简评
2021/03/02 无线电
新版mysql+apache+php Linux安装指南
2006/10/09 PHP
PHP中date与gmdate的区别及默认时区设置
2014/05/12 PHP
php中strlen和mb_strlen用法实例分析
2016/11/12 PHP
关于viewport,Ext.panel和Ext.form.panel的关系
2009/05/07 Javascript
js 自动播放的实例代码
2013/11/19 Javascript
javascript检测浏览器的缩放状态实现代码
2014/09/28 Javascript
js实现div拖动动画运行轨迹效果代码分享
2015/08/27 Javascript
详解JS-- 浮点数运算处理
2016/11/28 Javascript
jquery 实时监听输入框值变化的完美方法(必看)
2017/01/26 Javascript
Angular.JS实现无限级的联动菜单(使用demo)
2017/02/08 Javascript
一篇看懂vuejs的状态管理神器 vuex状态管理模式
2017/04/20 Javascript
node.js平台下利用cookie实现记住密码登陆(Express+Ejs+Mysql)
2017/04/26 Javascript
angular directive的简单使用总结
2017/05/24 Javascript
微信小程序动态显示项目倒计时效果
2017/06/13 Javascript
jQuery除指定区域外点击任何地方隐藏DIV功能
2017/11/13 jQuery
VUE2 前端实现 静态二级省市联动选择select的示例
2018/02/09 Javascript
JavaScript创建对象方式总结【工厂模式、构造函数模式、原型模式等】
2018/12/19 Javascript
简单了解JavaScript异步
2019/05/23 Javascript
使用VUE实现在table中文字信息超过5个隐藏鼠标移到时弹窗显示全部
2019/09/16 Javascript
微信小程序实现点击图片放大预览
2019/10/21 Javascript
JavaScript Html实现移动端红包雨功能页面
2021/01/10 Javascript
对Python中for复合语句的使用示例讲解
2018/11/01 Python
对Python3 * 和 ** 运算符详解
2019/02/16 Python
python实现扫描ip地址的小程序
2019/04/16 Python
python3.x提取中文的正则表达式示例代码
2019/07/23 Python
Win10 安装PyCharm2019.1.1(图文教程)
2019/09/29 Python
英国在线定做百叶窗网站:Make My Blinds
2020/08/17 全球购物
项目投资建议书
2014/05/16 职场文书
机关作风整顿个人剖析材料
2014/10/06 职场文书
行政答辩状范文
2015/05/21 职场文书
单位领导婚礼致辞
2015/07/28 职场文书
八年级作文之一起的走过日子
2019/09/17 职场文书
Go语言实现Snowflake雪花算法
2021/06/08 Golang
Java elasticsearch安装以及部署教程
2021/06/28 Java/Android
Java实现经典游戏泡泡堂的示例代码
2022/04/04 Java/Android