浅谈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 相关文章推荐
在第一个input框内输入内容.textarea自动得到第一个文件框的值的javascript代码
Apr 20 Javascript
JavaScript 学习笔记(四)
Dec 31 Javascript
屏蔽Flash右键信息的js代码
Jan 17 Javascript
jQuery 处理表单元素的代码
Feb 15 Javascript
jQuery实现的在线答题功能
Apr 12 Javascript
node.js中格式化数字增加千位符的几种方法
Jul 03 Javascript
基于javascript实现最简单的选项卡切换效果
May 16 Javascript
jQuery实现点击行选中或取消CheckBox的方法
Aug 01 Javascript
详解Vue2+Echarts实现多种图表数据可视化Dashboard(附源码)
Mar 21 Javascript
纯JS实现可用于页码更换的飞页特效示例
May 21 Javascript
解决betterScroll在vue中存在图片时,出现拉不动的问题
Sep 27 Javascript
Node使用Nodemailer发送邮件的方法实现
Feb 24 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中explode与split的区别介绍
2012/10/03 PHP
php使用websocket示例详解
2014/03/12 PHP
PHP提取字符串中的手机号正则表达式怎么写
2017/07/17 PHP
对php 判断http还是https,以及获得当前url的方法详解
2019/01/15 PHP
php + WebUploader实现图片批量上传功能
2019/05/06 PHP
JavaScript打字小游戏代码
2011/12/26 Javascript
jqeury-easyui-layout问题解决方法
2014/03/24 Javascript
jQuery实现拖动调整表格单元格大小的代码实例
2015/01/13 Javascript
jquery实现无限分级横向导航菜单的方法
2015/03/12 Javascript
js实现精美的图片跟随鼠标效果实例
2015/05/16 Javascript
浅析Nodejs npm常用命令
2016/06/14 NodeJs
js传值后台中文出现乱码的解决方法
2016/06/30 Javascript
详解基于Node.js的微信JS-SDK后端接口实现代码
2017/07/15 Javascript
详解axios 全攻略之基本介绍与使用(GET 与 POST)
2017/09/15 Javascript
详解angular应用容器化部署
2018/08/14 Javascript
简单说说angular.json文件的使用
2018/10/29 Javascript
Vue微信公众号网页分享的示例代码
2020/05/28 Javascript
Ajax获取node服务器数据的完整步骤
2020/09/20 Javascript
浅谈Vue使用Cascader级联选择器数据回显中的坑
2020/10/31 Javascript
详解Swift中属性的声明与作用
2016/06/30 Python
Django 路由系统URLconf的使用
2018/10/11 Python
浅谈Django+Gunicorn+Nginx部署之路
2019/09/11 Python
Java文件与类动手动脑实例详解
2019/11/10 Python
python函数enumerate,operator和Counter使用技巧实例小结
2020/02/22 Python
Keras构建神经网络踩坑(解决model.predict预测值全为0.0的问题)
2020/07/07 Python
基于Python3读写INI配置文件过程解析
2020/07/23 Python
详解CSS3的box-shadow属性制作边框阴影效果的方法
2016/05/10 HTML / CSS
美国庭院家具购物网站:AlphaMarts
2019/04/10 全球购物
英文版网络工程师求职信
2013/10/28 职场文书
农业局学习党的群众路线教育实践活动心得体会
2014/03/07 职场文书
预防传染病方案
2014/06/14 职场文书
2014年国庆节活动总结
2014/08/26 职场文书
2014年实习期工作总结
2014/11/27 职场文书
画展观后感
2015/06/17 职场文书
2016廉洁从业学习心得体会
2016/01/19 职场文书
MySQL 数据类型选择原则
2021/05/27 MySQL