浅谈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与WebMethod投票功能实现代码
Jan 19 Javascript
ExtJS下 Ext.Direct加载和提交过程排错小结
Apr 02 Javascript
js取两个数组的交集|差集|并集|补集|去重示例代码
Aug 07 Javascript
jquery插件之定时查询待处理任务数量
May 01 Javascript
javascript实现的元素拖动函数宿主为浏览器
Jul 21 Javascript
DOM节点的替换或修改函数replaceChild()用法实例
Jan 12 Javascript
JS将滑动门改为选项卡(需鼠标点击)的实现方法
Sep 27 Javascript
JS实现带圆弧背景渐变效果的导航菜单代码
Oct 13 Javascript
使用jQuery中的wrap()函数操作HTML元素的教程
May 24 Javascript
JS使用正则实现去掉字符串左右空格的方法
Dec 27 Javascript
在vue中使用vuex,修改state的值示例
Nov 08 Javascript
测量JavaScript函数的性能各种方式对比
Apr 27 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+xslt在windows平台上
2006/10/09 PHP
解析func_num_args与func_get_args函数的使用
2013/06/24 PHP
php+mysql查询优化简单实例
2015/01/13 PHP
PHP 实现代码复用的一个方法 traits新特性
2015/02/22 PHP
javascript 火狐(firefox)不显示本地图片问题解决
2008/07/05 Javascript
JavaScript 利用StringBuffer类提升+=拼接字符串效率
2009/11/24 Javascript
Jquery css函数用法(判断标签是否拥有某属性)
2011/05/28 Javascript
30个让人兴奋的视差滚动(Parallax Scrolling)效果网站
2012/03/04 Javascript
自己写了一个展开和收起的多更能型的js效果
2013/03/05 Javascript
JavaScript动态创建link标签到head里的方法
2014/12/22 Javascript
JS实现跟随鼠标的链接文字提示框效果
2015/08/06 Javascript
Angular1.x自定义指令实例详解
2017/03/01 Javascript
js获取一组日期中最近连续的天数
2017/05/25 Javascript
Angular弹出模态框的两种方式
2017/10/19 Javascript
详解vue表单——小白速看
2018/04/08 Javascript
vue-cli3 karma单元测试的实现
2019/01/18 Javascript
Vue开发之封装分页组件与使用示例
2019/04/25 Javascript
小程序实现录音上传功能
2019/11/22 Javascript
谈谈JavaScript令人迷惑的==与+
2020/08/31 Javascript
python 数据加密代码
2008/12/24 Python
在Python程序中实现分布式进程的教程
2015/04/28 Python
Python hashlib模块实例使用详解
2019/12/24 Python
解决pycharm安装第三方库失败的问题
2020/05/09 Python
Python3.7安装pyaudio教程解析
2020/07/24 Python
利用Python中的Xpath实现一个在线汇率转换器
2020/09/09 Python
Boden美国官网:英伦原创时装品牌
2017/07/03 全球购物
研究生自荐信
2013/10/09 职场文书
总经理助理岗位职责
2013/11/08 职场文书
幼儿园安全生产月活动总结
2014/07/05 职场文书
2014和解协议书范文
2014/09/15 职场文书
2014年预备党员学习新党章思想汇报
2014/09/15 职场文书
乡镇三严三实学习心得体会
2014/10/13 职场文书
2014年教研室工作总结
2014/12/06 职场文书
MySQL基础快速入门知识总结(附思维导图)
2021/09/25 MySQL
我家女友可不止可爱呢 公开OP主题曲无字幕动画MV
2022/04/11 日漫
提高系统的吞吐量解决数据库重复写入问题
2022/04/23 MySQL