浅谈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 相关文章推荐
extjs ColumnChart设置不同的颜色实现代码
May 17 Javascript
Javascript实现颜色rgb与16进制转换的方法
Apr 18 Javascript
基于JavaScript实现定时跳转到指定页面
Jan 01 Javascript
JavaScript来实现打开链接页面的简单实例
Jun 02 Javascript
JavaScript中splice与slice的区别
May 09 Javascript
AjaxUpLoad.js实现文件上传功能
Mar 02 Javascript
node跨域转发 express+http-proxy-middleware的使用
May 31 Javascript
详解ES6系列之私有变量的实现
Nov 21 Javascript
解析原来浏览器原生支持JS Base64编码解码
Aug 12 Javascript
在vant中使用时间选择器和popup弹出层的操作
Nov 04 Javascript
小程序实现列表倒计时功能
Jan 29 Javascript
Vue3.0 手写放大镜效果
Jul 25 Vue.js
浅析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笔记之常用文件操作
2010/10/12 PHP
PHP 只允许指定IP访问(允许*号通配符过滤IP)
2014/07/08 PHP
向fckeditor编辑器插入指定代码的方法
2007/05/25 Javascript
Javascript Select操作大集合
2009/05/26 Javascript
js Date自定义函数 延迟脚本执行
2010/03/10 Javascript
JQuery为textarea添加maxlength属性的代码
2010/04/07 Javascript
javascript+HTML5自定义元素播放焦点图动画
2016/02/21 Javascript
基于Bootstrap实现Material Design风格表单插件 附源码下载
2016/04/18 Javascript
jQuery+Pdo编写login登陆界面
2016/08/01 Javascript
浅谈Angular.js中使用$watch监听模型变化
2017/01/10 Javascript
Vue数据驱动模拟实现3
2017/01/11 Javascript
基于Vue实现tab栏切换内容不断实时刷新数据功能
2017/04/13 Javascript
详解Webpack-dev-server的proxy用法
2018/09/08 Javascript
在微信小程序中保存网络图片
2019/02/12 Javascript
jquery实现吸顶导航效果
2020/01/08 jQuery
JS实现随机点名器
2020/04/12 Javascript
Vue实现简单计算器
2021/01/20 Vue.js
[02:27]2014DOTA2国际邀请赛 VG赛后采访:更大的挑战在等着我们
2014/07/13 DOTA
Python虚拟环境Virtualenv使用教程
2015/05/18 Python
Python实现字典依据value排序
2016/02/24 Python
根据DataFrame某一列的值来选择具体的某一行方法
2018/07/03 Python
Python这样操作能存储100多万行的xlsx文件
2019/04/16 Python
详解Python中正则匹配TAB及空格的小技巧
2019/07/26 Python
Python 调用有道翻译接口实现翻译
2020/03/02 Python
用python写爬虫简单吗
2020/07/28 Python
Python filter()及reduce()函数使用方法解析
2020/09/05 Python
Django利用elasticsearch(搜索引擎)实现搜索功能
2020/11/26 Python
python 爬虫爬取京东ps4售卖情况
2020/12/18 Python
Matlab使用Plot函数实现数据动态显示方法总结
2021/02/25 Python
Puritan’s Pride(普丽普莱)官方网站:美国最大最全的保健品公司之一
2016/10/23 全球购物
加拿大领先的牛仔零售商:Bluenotes
2018/01/22 全球购物
大学生创业计划书怎么写
2014/09/15 职场文书
圣诞节开幕词
2015/01/29 职场文书
小学生一年级(书信作文)
2019/08/13 职场文书
四十九个javascript小知识实用技巧
2021/11/20 Javascript
Tomcat用户管理的优化配置详解
2022/03/31 Servers