美文网首页
JavaScript函数传参

JavaScript函数传参

作者: 椰果粒 | 来源:发表于2019-06-27 18:10 被阅读0次

几个面试题

// 函数传递,值类型
// 示例1:
var name = 'aaa'
function modifyName(name){
  name = "bbb"
}
modifyName(name)
console.log(name);

// 示例2:
function addNum(num){
  num += 10;
  return num
}
var num = 10;
var result = addNum(num)
console.log(num);
console.log(result); 
// 函数传递,引用类型
// 示例1:
function setObj(obj){
  obj.name = "bbb"  // 1
  obj = {}          // 2
  obj.name = "ccc"  // 3
}
var obj = {
  name: "aaa",
  age: 18
}
setObj(obj)
console.log(obj); 

清先思考再看答案

"aaa"
10
20
{name: "bbb", age:18}

解析题目

首先看一下函数的值类型和引用类型

基本类型与引用类型
  变量的复制:
    基本类型:克隆一个,两者完全独立,只是值一样而已
    引用类型:克隆指针,两者指向同一个地址,修改的话都会变。
如果想要深克隆,即如果是对象的话,也完全独立,请参照:https://www.jianshu.com/p/1f7444a52ac0

根据以上,我们可以看一下上边的面试题
值类型示例2解释如下:
num是值类型,作为函数参数传递的时候,是将此值复制一份传递给函数,这两个是完全独立互不影响的。所以在执行时,num本身的值没有变,改变的是被复制的。
示例1同理。

引用类型示例1解释如下:
在JavaScript中,当obj作为函数参数传递时,传递的是引用,也就是内存地址。所以在函数中修改的对象实际上是函数外边那个对象。
解释:在函数的内部我们标注了1,2,3,一共三行。
因为函数参数是引用传递时,只传递了指针。
第一行,将指向name的参数改变,即obj.name变了
第二行,整个obj都变了,这时候就会开辟一个新的空间,且有一个新的obj对象,指向另一个空间
第三行,就是对新的obj对象的修改了。

注意:在实际开发中,我们应当避免这种写法。因为会造成全局作用域的污染。

相关文章

  • JavaScript函数传参

    几个面试题 清先思考再看答案 解析题目 首先看一下函数的值类型和引用类型 根据以上,我们可以看一下上边的面试题值类...

  • JavaScript基础 函数传参

    实参:实际参数(所有的数据类型都可做实参)形参:形式参数(变量) 实参与形参一一对应; 例: 例题: 注意:局部变...

  • 函数传参的问题

    函数传参 值和引用 JavaScript 中没有指针,引用的工作机制也不尽相同。在 JavaScript 中变量不...

  • 函数

    简单函数格式 定义 调用函数 传参函数格式: 传参数 定义 注意 重点 实例(简单) 实例(传参) 实例函数(调用...

  • JavaScript学习系列(一)--函数参数以及属性操作

    摘要 1.函数传参。2.两种操作属性的方法。3.style和className 一、函数传参 改变背景颜色函数传参...

  • 匿名函数、函数传参

    函数传参

  • four.day_shell监控

    函数传参

  • 函数传参

    函数传参 改变背景颜色-函数传参:参数就是站位符什么时候用传参——函数里定不下来的东西 改变div的任意样式-操纵...

  • 今日小结

    指针传参 在函数间指针变量做参传值,只传地址,不附带其他信息。故以数组名为指针变量被函数调用传参后,在调用函数内s...

  • 初学python,调用固定参,不固定参函数遇到的问题!

    函数调用时的参数传递方式:(调用函数) 传递方式有以下四种: 位置传参 序列传参 关键字传参 字典关键字传参 --...

网友评论

      本文标题:JavaScript函数传参

      本文链接:https://www.haomeiwen.com/subject/avfdcctx.html