浅谈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 相关文章推荐
select组合框option的捕捉实例代码
Sep 30 Javascript
javascript firefox不显示本地预览图片问题的解决方法
Nov 12 Javascript
基于JavaScript实现继承机制之调用call()与apply()的方法详解
May 07 Javascript
同域jQuery(跨)iframe操作DOM(实例讲解)
Dec 19 Javascript
javascript+css3 实现动态按钮菜单特效
Feb 06 Javascript
Knockoutjs 学习系列(一)ko初体验
Jun 07 Javascript
关于backbone url请求中参数带有中文存入数据库是乱码的快速解决办法
Jun 13 Javascript
基于jQuery实现图片推拉门动画效果的两种方法
Aug 26 jQuery
Vue中对比scoped css和css module的区别
May 17 Javascript
Vue-Router的使用方法
Sep 05 Javascript
JavaScript递归函数定义与用法实例分析
Jan 24 Javascript
服务端预渲染之Nuxt(使用篇)
Apr 08 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 header 跳转
2013/06/17 PHP
php微信公众开发之获取周边酒店信息的方法
2014/12/22 PHP
讲解WordPress开发中一些常用的debug技巧
2015/12/18 PHP
Jquery中dialog属性小记
2010/09/03 Javascript
IE6不能修改NAME问题的解决方法
2010/09/03 Javascript
javascript放大镜效果的简单实现
2013/12/09 Javascript
深入理解JavaScript系列(17):面向对象编程之概论详细介绍
2015/03/04 Javascript
js实现的后台左侧管理菜单代码
2015/09/11 Javascript
基于jQuery实现音乐播放试听列表
2016/04/14 Javascript
JavaScript实现简单Tip提示框效果
2016/04/20 Javascript
jquery实现网页定位导航
2016/08/23 Javascript
浅谈JS之tagNaem和nodeName
2016/09/13 Javascript
jquery easyui validatebox remote的使用详解
2016/11/09 Javascript
angularJS 指令封装回到顶部示例详解
2017/01/22 Javascript
JS简单生成随机数(随机密码)的方法
2017/05/11 Javascript
详解webpack3编译兼容IE8的正确姿势
2017/12/21 Javascript
基于vue中解决v-for使用报红并出现警告的问题
2018/03/03 Javascript
Angular ng-animate和ng-cookies用法详解
2018/04/18 Javascript
video.js 一个页面同时播放多个视频的实例代码
2018/11/27 Javascript
JS散列表碰撞处理、开链法、HashTable散列示例
2019/02/08 Javascript
Python生成pdf文件的方法
2014/08/04 Python
Python判断两个对象相等的原理
2017/12/12 Python
对numpy和pandas中数组的合并和拆分详解
2018/04/11 Python
Python continue继续循环用法总结
2018/06/10 Python
Django使用paginator插件实现翻页功能的实例
2018/10/24 Python
Django中的AutoField字段使用
2020/05/18 Python
python中Pexpect的工作流程实例讲解
2021/03/02 Python
英国豪华装饰照明品牌的在线零售商:Inspyer Lighting
2019/12/10 全球购物
澳大利亚排名第一的露营和户外设备在线零售商:Outbax
2020/05/06 全球购物
电台实习生求职信
2014/02/25 职场文书
离婚协议书标准格式
2014/10/04 职场文书
党的群众路线教育实践活动个人对照检查材料(乡镇)
2014/11/05 职场文书
云台山导游词
2015/02/03 职场文书
Python数据分析入门之教你怎么搭建环境
2021/05/13 Python
python随机打印成绩排名表
2021/06/23 Python
为自由献出你的心脏!「进击的巨人展 FINAL」2022年6月在台开展
2022/04/13 日漫