浅谈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 相关文章推荐
音乐播放用的的几个函数
Sep 07 Javascript
Prototype 学习 工具函数学习($w,$F方法)
Jul 12 Javascript
JS拖动技术 关于setCapture使用
Dec 09 Javascript
jQuery对html元素取值与赋值的方法
Nov 20 Javascript
JavaScript中的数组操作介绍
Dec 30 Javascript
JavaScript添加随滚动条滚动窗体的方法
Feb 23 Javascript
[原创]Javascript 实现广告后加载 可加载百度谷歌联盟广告
May 11 Javascript
url中的特殊符号有什么含义(推荐)
Jun 17 Javascript
js实现窗口全屏示例详解
Sep 17 Javascript
在Vue中实现随hash改变响应菜单高亮
Mar 09 Javascript
vue-cli3访问public文件夹静态资源报错的解决方式
Sep 02 Javascript
vue-drawer-layout实现手势滑出菜单栏
Nov 19 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实现文件上传二法
2006/10/09 PHP
PHP+DBM的同学录程序(5)
2006/10/09 PHP
PHP 读取文件内容代码(txt,js等)
2009/12/06 PHP
PHP进阶学习之Geo的地图定位算法详解
2019/06/19 PHP
如何在Laravel5.8中正确地应用Repository设计模式
2019/11/26 PHP
Javascript常用运算符(Operators)-javascript基础教程
2007/12/14 Javascript
百度Popup.js弹出框进化版 拖拽小框架发布 兼容IE6/7/8,Firefox,Chrome
2010/04/13 Javascript
web前端开发也需要日志
2010/12/09 Javascript
JavaScript中的Array对象使用说明
2011/01/17 Javascript
客户端js判断文件类型和文件大小即限制上传大小
2013/11/20 Javascript
jQuery实现鼠标悬停显示提示信息窗口的方法
2015/04/30 Javascript
第一次动手实现bootstrap table分页效果
2016/09/22 Javascript
使用jQuery的ajax方法向服务器发出get和post请求的方法
2017/01/13 Javascript
bootstrap实现动态进度条效果
2017/03/08 Javascript
js实现时间轴自动排列效果
2017/03/09 Javascript
canvas绘制一个常用的emoji表情
2017/03/30 Javascript
3种vue路由传参的基本模式
2018/02/22 Javascript
mpvue跳转页面及注意事项
2018/08/03 Javascript
Vue响应式原理Observer、Dep、Watcher理解
2019/06/06 Javascript
vue 实现v-for循环回来的数据动态绑定id
2019/11/07 Javascript
Python将文本去空格并保存到txt文件中的实例
2018/07/24 Python
java判断三位数的实例讲解
2019/06/10 Python
python网络编程 使用UDP、TCP协议收发信息详解
2019/08/29 Python
python getpass实现密文实例详解
2019/09/24 Python
python 对xml解析的示例
2021/02/27 Python
Html5上传图片 移动端、PC端通用代码
2016/06/08 HTML / CSS
如何用Java实现列出某个目录下的所有子目录
2015/07/20 面试题
如何写毕业求职自荐信
2013/11/06 职场文书
大专生求职信
2014/06/29 职场文书
党的群众路线教育实践活动总结报告
2014/07/03 职场文书
美德少年事迹材料1000字
2014/08/21 职场文书
做一个有道德的人活动方案
2014/08/25 职场文书
阿里云服务器搭建Php+Apache运行环境的详细过程
2021/05/15 PHP
使用Redis实现实时排行榜功能
2021/07/02 Redis
继承Win10缺点!教你关闭Win11烦人的网络搜索
2021/11/23 数码科技
国产动画《万圣街》日语配音版制作决定!
2022/03/20 国漫