浅谈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 相关文章推荐
学习YUI.Ext 第六天--关于树TreePanel(Part 1)
Mar 10 Javascript
js实现的仿新浪微博完美的时间组件升级版
Dec 20 Javascript
connect中间件session、cookie的使用方法分享
Jun 17 Javascript
jQuery限制图片大小的方法
May 25 Javascript
微信小程序 template模板详解及实例
Feb 21 Javascript
详谈js遍历集合(Array,Map,Set)
Apr 06 Javascript
Javascript 一些需要注意的细节(必看篇)
Jul 08 Javascript
详解Vue.js自定义tipOnce指令用法实例
Dec 19 Javascript
微信小程序 可搜索的地址选择实现详解
Aug 28 Javascript
浅谈layui使用模板引擎动态渲染元素要注意的问题
Sep 14 Javascript
详解Vue 单文件组件的三种写法
Feb 19 Javascript
vue 组件之间事件触发($emit)与event Bus($on)的用法说明
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
pw的一个放后门的方法分析
2007/10/08 PHP
PHP下通过exec获得计算机的唯一标识[CPU,网卡 MAC地址]
2011/06/09 PHP
PHP快速排序quicksort实例详解
2016/09/28 PHP
PHP使用Session实现上传进度功能详解
2019/08/06 PHP
用于table内容排序
2006/07/21 Javascript
使用ImageMagick进行图片缩放、合成与裁剪(js+python)
2013/09/16 Javascript
Jquery EasyUI的添加,修改,删除,查询等基本操作介绍
2013/10/11 Javascript
用javascript添加控件自定义属性解析
2013/11/25 Javascript
JavaScript阻止浏览器返回按钮的方法
2015/03/18 Javascript
jQuery实现仿腾讯迷你首页选项卡效果代码
2015/09/17 Javascript
浅析Bootstrap验证控件的使用
2016/06/23 Javascript
修改Jquery Dialog 位置的实现方法
2016/08/26 Javascript
通过AngularJS实现图片上传及缩略图展示示例
2017/01/03 Javascript
jquery 实时监听输入框值变化的完美方法(必看)
2017/01/26 Javascript
vue 实现axios拦截、页面跳转和token 验证
2018/07/17 Javascript
vue 监听某个div垂直滚动条下拉到底部的方法
2018/09/15 Javascript
vue.js实现回到顶部动画效果
2019/07/31 Javascript
Vue 利用指令实现禁止反复发送请求的两种方法
2019/09/15 Javascript
关于在LayUI中使用AJAX提交巨坑记录
2019/10/25 Javascript
js canvas实现星空连线背景特效
2019/11/01 Javascript
小程序实现简单语音聊天的示例代码
2020/07/24 Javascript
解决python2.7 查询mysql时出现中文乱码
2016/10/09 Python
计算机二级python学习教程(2) python语言基本语法元素
2019/05/16 Python
django 框架实现的用户注册、登录、退出功能示例
2019/11/28 Python
python jenkins 打包构建代码的示例代码
2019/11/29 Python
详解python实现可视化的MD5、sha256哈希加密小工具
2020/09/14 Python
阿里巴巴美国:Alibaba美国
2019/11/24 全球购物
乔迁宴答谢词
2014/01/21 职场文书
秋季校运动会广播稿
2014/02/23 职场文书
党的群众路线教育实践活动个人对照检查剖析材料
2014/09/23 职场文书
运动会宣传稿100字
2015/07/23 职场文书
2015年秋季灭鼠工作总结
2015/07/27 职场文书
小学语文课《掌声》教学反思
2016/03/03 职场文书
八年级作文之友谊
2019/12/02 职场文书
Nginx的基本概念和原理
2022/03/21 Servers
DE1107机评
2022/04/05 无线电