浅谈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 页面载入进度条实现代码
Feb 08 Javascript
获取下拉列表框的值是数组,split,$.inArray示例
Nov 13 Javascript
js二维数组排序的简单示例代码
Jan 24 Javascript
javascript异步编程的4种方法
Feb 19 Javascript
IE10中flexigrid无法显示数据的解决方法
Jul 26 Javascript
jquery性能优化高级技巧
Aug 24 Javascript
javascript每日必学之封装
Feb 23 Javascript
Vue学习笔记之表单输入控件绑定
Sep 05 Javascript
基于Cookie常用操作以及属性介绍
Sep 07 Javascript
在 vue-cli v3.0 中使用 SCSS/SASS的方法
Jun 14 Javascript
Vue3不支持Filters过滤器的问题
Sep 24 Javascript
JavaScript实现前端网页版倒计时
Mar 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 session应用实例 登录验证
2009/03/16 PHP
解析mysql left( right ) join使用on与where筛选的差异
2013/06/18 PHP
PHP函数实现分页含文本分页和数字分页
2014/10/23 PHP
phpQuery让php处理html代码像jQuery一样方便
2015/01/06 PHP
PHP实现递归复制整个文件夹的类实例
2015/08/03 PHP
记录一次排查PHP脚本执行卡住的问题
2016/12/27 PHP
当自定义数据属性为json格式字符串时jQuery的data api问题探讨
2013/02/18 Javascript
JS增加行复制行删除行的实现代码
2013/11/09 Javascript
ExtJS[Desktop]实现图标换行示例代码
2013/11/17 Javascript
使用node.js 获取客户端信息代码分享
2014/11/26 Javascript
js控制文本框只输入数字和小数点的方法
2015/03/10 Javascript
用js动态添加html元素,以及属性的简单实例
2016/07/19 Javascript
JavaScript每天必学之数组和对象部分
2016/09/17 Javascript
JS插件plupload.js实现多图上传并显示进度条
2016/11/29 Javascript
javascript事件的传播基础实例讲解(35)
2017/02/14 Javascript
详解vue服务端渲染(SSR)初探
2017/06/19 Javascript
Vue.js中对css的操作(修改)具体方式详解
2018/10/30 Javascript
vue实现压缩图片预览并上传功能(promise封装)
2019/01/10 Javascript
JS中比Switch...Case更优雅的多条件判断写法
2019/09/05 Javascript
解决layer.msg 不居中 ifram中的问题
2019/09/05 Javascript
微信小程序实现modal弹出框遮罩层组件(可带文本框)
2020/12/20 Javascript
python设计模式大全
2016/06/27 Python
Django 生成登陆验证码代码分享
2017/12/12 Python
Python操作Oracle数据库的简单方法和封装类实例
2018/05/07 Python
Python使用sax模块解析XML文件示例
2019/04/04 Python
python脚本监控logstash进程并邮件告警实例
2020/04/28 Python
施工人员岗位职责
2013/12/12 职场文书
行政管理毕业生自荐信
2014/02/24 职场文书
报告会主持词
2014/04/02 职场文书
单位委托书范本
2014/04/04 职场文书
新学期开学演讲稿
2014/05/24 职场文书
英文感谢信格式
2015/01/21 职场文书
深入理解python多线程编程
2021/04/18 Python
python使用openpyxl库读写Excel表格的方法(增删改查操作)
2021/05/02 Python
python中如何对多变量连续赋值
2021/06/03 Python
Oracle11g r2 卸载干净重装的详细教程(亲测有效已重装过)
2021/06/04 Oracle