浅谈JavaScript函数参数的可修改性问题

 更新时间:2013年12月05日 10:28:11   作者:  
这篇文章主要是对JavaScript函数参数的可修改性进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助

一道笔试题思考而来的,通常情况下没人会在函数内部修改参数值。这里仅拿出来讨论,有三种方式可以修改。

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中的适配器模式Adapter Pattern

    理解JavaScript中的适配器模式Adapter Pattern

    这篇文章主要介绍了理解JavaScript中的适配器模式,适配器模式即Adapter Pattern,是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,下文更多相关介绍需要的小伙伴可以参考一下
    2022-04-04
  • ECMAScript6中Map映射的基本概念与常用方法

    ECMAScript6中Map映射的基本概念与常用方法

    Map是ES6中新增的数据结构,Map类似于对象,但普通对象的 key 必须是字符串或者数字,而 Map 的 key 可以是任何数据类型,这篇文章主要给大家介绍了关于ECMAScript6中Map映射的基本概念与常用方法,需要的朋友可以参考下
    2021-07-07
  • VsCode插件整理(小结)

    VsCode插件整理(小结)

    这篇文章主要介绍了VsCode插件整理(小结),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • input标签内容改变的触发事件介绍

    input标签内容改变的触发事件介绍

    onchange事件在内容改变(两次内容有可能相等)且失去焦点时触发;onpropertychange事件是实时触发,每增加或删除一个字符就会触发
    2014-06-06
  • JavaScript反射与依赖注入实例详解

    JavaScript反射与依赖注入实例详解

    这篇文章主要介绍了JavaScript反射与依赖注入,结合实例形式较为详细的分析了JavaScript反射与依赖注入的概念、原理、定义、使用方法及相关操作注意事项,需要的朋友可以参考下
    2018-05-05
  • uni.getLocation和wx.getLocation方法调用无效也不返回失败的解决方案

    uni.getLocation和wx.getLocation方法调用无效也不返回失败的解决方案

    这篇文章主要给大家介绍了关于uni.getLocation和wx.getLocation方法调用无效也不返回失败的解决方案,文中通过实例代码以及图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2023-04-04
  • JavaScript常用对象的方法和属性小结

    JavaScript常用对象的方法和属性小结

    JavaScript是基于对象的语言。我们知道,对象是由一组数据(JavaScript中称之为属性)和施加在这组数据上的方法组成的。JavaScript中还有一些不属于任何对象的系统函数
    2012-01-01
  • Webpack4+Babel7+ES6兼容IE8的实现

    Webpack4+Babel7+ES6兼容IE8的实现

    这篇文章主要介绍了Webpack4+Babel7+ES6兼容IE8的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • js查看一个函数的执行时间实例代码

    js查看一个函数的执行时间实例代码

    本篇文章给大家分享一段实例代码,主要介绍js查看一个函数的执行时间,代码简单易懂,感兴趣的朋友一起跟着小编来学习学习吧
    2015-09-09
  • 前端js使用xlsx-js-style导出Excel文件并修饰单元格样式

    前端js使用xlsx-js-style导出Excel文件并修饰单元格样式

    这篇文章主要给大家介绍了关于前端js使用xlsx-js-style导出Excel文件并修饰单元格样式的相关资料,前端开发过程中经常遇到导出excel的需求,需要的朋友可以参考下
    2023-08-08

最新评论