一、变量:

  • 基本类型是变量对象重新创建一个新值给变量对象空间,虽然是同一个值但是互不影响。
  • 引用类型是也是将一个值重新赋值给新的变量空间,但是这个值是堆中对象的一个指针,新的变量和旧的变量指向是同一个对象。

如下:

  • 基本类型
     let num=;
let num1=num;
num=num+;
console.log(num,num1);

输出:

  • 引用类型
     let obj={};
let obj1=obj;
obj.name='tom';
console.log(obj,obj1);

输出:

总结:

  1. 基本类型在赋值新的变量的时候,是重新创建一个值给新的变量空间,旧的变量和新的变量互不影响。
  2. 引用类型的,在赋值新的变量,是将对象在堆中的内存指针赋值给新的变量空间,在改变一个变量的属性,直接影响另一个变量,也就是说他们指向的是同一个对象。

二、函数传参

无论是基本类型还是引用类型在函数传参都是按值传参。

也许大家都会有疑惑为什么变量要基本类型和引用类型 一个按值 一个按引用?

  • 基本类型=>和变量赋值一样,将一个值传递函数的形参(局部变量),在函数内调用该变量,并改变并不会影响函数外的变量。因为这2个是不同的值互不影响。
     test=(num)=>{
num+=;
console.log(num);
};
let testVal=;
test(testVal);
console.log(testVal);//2
  • 引用类型,传递的是对象在堆中的内存地址值,而不是引用!!
    testObj=(obj)=>{
obj=new Object();
obj.name='evil';
console.log(obj.name);
};
let testMyObj={name:'jack'};
testObj(testMyObj);
console.log(testMyObj.name);//jack

引用类型传递是对象的内存地址,而不是引用,如果是引用那么在函数testObj 在函数作用域中的局部变量obj在改变引用的时候,函数外层的testMyObj输出的name值应该是evil,而不是jack 所以显然传递的值即对象在堆中的内存地址。

js 变量以及函数传参的更多相关文章

  1. JS中的函数传参

    前言: 函数分为有参有返回值,有参无返回值,无参无返回值,无参有返回值:那么对于无参数的函数你想使用函数的调用怎么办呢?如果你想封装一个代码,实现多种功能,但是形参大于实参或者实参大于形参又该如何?本 ...

  2. shell中的特殊变量和函数传参

    shell中的特殊变量 $? :上一个命令的执行状态返回值 $#::参数的个数 $*:参数列表,所有的变量作为一个字符串 $@:参数列表,每个变量作为单个字符串 $1-9,${10}:位置参数 $$: ...

  3. 看似无参却有参-----JS中的函数传参

    事件event JS的事件event是一个非常大的对象,不管是什么事件,事件的详情都会绑定到全局变量event中.这样做之所以安全,就是因为JS是单线程的. <html> <body ...

  4. 【JS学习笔记】函数传参

    比如仅仅改变背景的颜色 函数传参:参数就是占位符. 那么在什么时候用传参呢?函数里定不下来的东西. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1 ...

  5. c# 内存的具体表现- 通用类型系统 深拷贝 浅拷贝 函数传参

    c# 通用类型系统 及变量在 深拷贝 浅拷贝 函数传参 中的深层次的表现 在编程中遇到了一些想不到的异常,跟踪发现,自己对于c#变量在内存上的表现理解有偏差,系统的学习并通过代码实验梳理了各种情况下, ...

  6. 函数传参,改变Div任意属性的值&&图片列表:鼠标移入/移出改变图片透明度

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. x64汇编第三讲,64位调用约定与函数传参.

    目录 x64汇编第三讲,64位调用约定与函数传参. 一丶复习X86传参 二丶x64汇编 2.1汇编详解 x64汇编第三讲,64位调用约定与函数传参. 一丶复习X86传参 在x86下我们汇编的传参如下: ...

  8. javascript-初级-day05js函数传参

    JS基础-01 函数传参.参数类型-1 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Conten ...

  9. VC与JavaScript交互(三) --- CWebPage类调用javascript函数(给js函数传参,并取得返回值)

    ①需要一个别人写好的类CWebPage,将其对于的两个文件WebPage.h和WebPage.cpp添加到工程中. ②添加WebBrowser控件,在视图/对话框类的头文件中#include &quo ...

随机推荐

  1. suanec-rotatelogs

    简介 一个简单的日志滚动器 业界已有大量优秀的日志滚动工具来限制日志大小 本工具只是仿制了Apache httpd中的rotatelogs 不同的是,工作模式参考了yarn namenode日志的管理 ...

  2. 最常见的Java面试题及答案汇总(五)

    Java Web 64. jsp 和 servlet 有什么区别? jsp经编译后就变成了Servlet.(JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器 ...

  3. MySQL报错Packet for query is too large问题解决

    今天用java写了批量插入运行时,报错: Error updating database.  Cause: com.mysql.cj.jdbc.exceptions.PacketTooBigExcep ...

  4. 使用Python的turtle画小绵羊

    今天学习使用turtle画图,本来想实现个3D效果,结果2D都画了半天,画圆被绕晕了 目标图片: 实现代码: # -*- coding:utf-8 -*- # __author__ :kusy # _ ...

  5. (语法基础)浅谈面向切面编程(AOP)

    一:前言 面向切面编程是一个很重要的编程思想,想要写出一个便于维护的程序,理解AOP并且能熟练的在实际编程中合理的运用AOP思想是很有必要的 二:AOP的基本概念 基础概念:AOP中文翻译面向切面编程 ...

  6. GitHub: Oracle Database on Docker 为测试 改天试试

    Oracle Database on Docker https://github.com/oracle/docker-images/tree/master/OracleDatabase/SingleI ...

  7. Python之logging.basicConfig函数各参数

    filename: 指定日志文件名 filemode: 和file函数意义相同,指定日志文件的打开模式,'w'或'a' format: 指定输出的格式和内容,format可以输出很多有用信息,如上例所 ...

  8. yzoj 2372 小B的数字 题解

    题意 判断是否存在一个序列 $ b_i $ 使得 $ \prod_{i = 1}^{n} b_i  | b_i^{a_i}$ 恒成立,其中 $ b_i $ 中的每个数都是2的正整数次幂. 样例输入 3 ...

  9. Linux node.js安装

    1.下载地址 下载node 英文网址:https://nodejs.org/en/download/ 中文网址:http://nodejs.cn/download/ 2.下载下来的tar文件上传到服务 ...

  10. 介绍一款好用的命令行工具Cmder

    一.Cmder的介绍: 在大多数情况下,我们都想复制命令行窗口中的命令行,但是cmd复制粘贴大家都懂得:有没有更好的工具替代呢? 答案是肯定的,今天我将为大家介绍一款工具--Cmder. Cmder可 ...