变量包含了两种不同类型的值:

  • 基本类型 (Undefined、null、Boolean、Number、string都属于基本类型)
  • 引用类型 (对象)

两种值在赋值上不同的是:

  • 将一个引用类型的值(对象)赋值给一个变量,可以为其添加/删除属性和方法。

    但如果是一个基本类型的值是不可以这样的。
 var person = new Object();
person.name = "Cat.y";
console.log('person.name = ' + person.name);
  • 将一个基本类型的值赋给一个变量,那么是在这个变量上创建一个新值,改变新的变量里面的值,原本变量中的值不受影响
    var num1 = 5;
var num2 = num1;
console.log('num1 = ' + num1 + '\n' + 'num2 = ' + num2); //这里应该输出: num1 = 5 num2 = 5 num2 = 10;
console.log('改变num2的值后:\n')
console.log('num1 = ' + num1 + '\n' + 'num2 = ' + num2); //这里应该输出: num1 = 5 num2 = 10 console.log('\n\n');
  • 将一个对象赋值给一个变量,它赋的值实际上是这个内存空间的指向地址。

    可以理解为,创建了一个对象,就相当于开了一个房,你往这个对象里添加/删除方法、属性、值,就相当于在这个房间内放置/取出东西,

    而变量赋的值实际上就是这个房间的门牌号。

    因此,两个变量操作的都是同一个内存里的东西,所以,obj1改变了,obj2也会相应的变化
    var obj1 = new Object();
var obj2 = obj1;
obj2.name = 'Cat.y';
console.log('obj1.name = ' + obj1.name + '\n' + 'obj2.name = ' + obj2.name );
// obj1.name = Cat.y obj2.name = Cat.y

函数中的参数相当于一个局部的变量

    function addTen(num){
num += 10;
return num;
}
var count = 10;
var result = addTen(count); //输出结果应该为: count = 10 result = 20;
console.log('count = ' + count + '\n' + 'result = ' + result + '\n');

例子中将一个数值赋值给变量count,再新建一个变量result, result 的值是调用了函数addTen并将count做为参数传了进去而返回的值

也就是说,result的值是经过addTen函数计算而返回的一个新的值;

函数外,count并不会改变,因为它是相当于变量count的值赋值给了局部变量num,num改变的值是不会影响到count的

再例:

    function setName(obj){
obj.name = 'Cat.u'; obj = new Object(); //在函数内重新给obj赋值了一个新的对象,指向的地址改变
obj.name = 'Tuanzi.y'; //影响不到函数外的值
} var person = new Object();
console.log('person.name = ' + person.name + '\n'); //这时候还没给peron.name赋值
setName(person);
console.log('person.name = ' + person.name + '\n'); //person.name = Cat.u

如果调用一个函数时,将一个对象作为参数传了进去,这里要注意的是,它传递的是“指向这个内存的地址”,是地址而不是值,也就是“门牌号”

如果在函数内重新给obj变量赋值一个新的对象,obj指向的内存地址改变,那之后更改对象内的属性,对函数外是没影响的

【js高程学习笔记】关于变量值和函数参数的更多相关文章

  1. 【js高程学习笔记】Object类型

    创建一组Object的实例的方式有两种: 方法一: var person = new Object(); person.name = '团子'; person.race = '猫'; person.s ...

  2. Python学习笔记(2.1)函数参数练习

    关键字参数 和 命名关键字参数 # -*- coding: utf-8 -*- def print_scores(**kw): print(' Name Score') print('-------- ...

  3. Python3学习笔记(十一):函数参数详解

    一.位置参数 根据参数的位置来传递参数,调用函数时,传递的参数顺序和个数必须和定义时完全一致 # 定义函数 def man(name, age): print("My name is %s, ...

  4. js再学习笔记

    #js再学习笔记 ##基本 1.js严格区分大小写   2.js末尾的分号可加,也可不加   3.六种数据类型(使用typeof来检验数据的类型) `typeof` - undefined: `var ...

  5. js获取jsp中的变量值

    js获取jsp中的变量值,有两种方式: 1.jsp标签获取属性 var message = '<%=request.getAttribute("message")%>' ...

  6. JS数组学习笔记

    原文:JS数组学习笔记 最近在备课数组,发现很多ES5的方法平时很少用到.细节比较多,自己做了大量例子和整理,希望对大家了解JavaScript中的Array有所帮助. 概念 数组是值的有序集合.每个 ...

  7. ES6学习笔记<二>arrow functions 箭头函数、template string、destructuring

    接着上一篇的说. arrow functions 箭头函数 => 更便捷的函数声明 document.getElementById("click_1").onclick = ...

  8. python3.4学习笔记(二十) python strip()函数 去空格\n\r\t函数的用法

    python3.4学习笔记(二十) python strip()函数 去空格\n\r\t函数的用法 在Python中字符串处理函数里有三个去空格(包括'\n', '\r', '\t', ' ')的函数 ...

  9. APUE学习笔记——10.9 信号发送函数kill、 raise、alarm、pause

    转载注明出处:Windeal学习笔记 kil和raise kill()用来向进程或进程组发送信号 raise()用来向自身进程发送信号. #include <signal.h> int k ...

随机推荐

  1. chrome浏览器导出文件提示病毒扫描失败

    转自https://zhidao.baidu.com/question/758059392558639324.html 1.windows+R,打开运行 2.输入regedit.exe,确定,打开注册 ...

  2. Mysql 5.7--ubuntu18.04 安装过程及遇到的问题

    Mysql 5.7安装过程 1. 下载mysql的apt-config文件 a. https://dev.mysql.com/downloads/file/?id=477124 b. 点击downlo ...

  3. msql事务与引擎

    事务介绍   简单来说,事务就是指逻辑上的一组SQL语句操作,组成这组操作的各个SQL语句,执行时要么全成功要么全失败.    MySQL5.5支持事务的引擎:Innodb/ndb  一.事务四大特性 ...

  4. Bootstrap3基础 栅格系统 列中有行,行中有列

      内容 参数   OS   Windows 10 x64   browser   Firefox 65.0.2   framework     Bootstrap 3.3.7   editor    ...

  5. Autowired(required=true)

    问题原因 没有实现类的接口上添加了@Autowired注解 问题解决 删掉@Autowired注解 bug详情 Description: Field userDAO in com.crab.servi ...

  6. C# 利用反射动态给模型Model 赋值

    https://www.cnblogs.com/waitingfor/articles/2220669.html object ff = Activator.CreateInstance(tt, nu ...

  7. [java]第一个程序

    HelloWorld 主函数 学习一门语言第一部分就是学习主函数,Java的主函数是main函数有如下形式: public class HelloWorld{ public static void m ...

  8. mongodb常用的sql语句总结

    本文为博主原创,转载请注明出处: 1 .  查询所有 db.getCollection('CollectionName').find() 2.根据条件查询 db.getCollection('Coll ...

  9. java中Map.Entry的使用方法

    在Map类设计是,提供了一个嵌套接口(static修饰的接口):Entry.Entry将键值对的对应关系封装成了对象,即键值对对象,这样我们在遍历Map集合时,就可以从每一个键值对(Entry)对象中 ...

  10. Django中的FBV与CBV

    一. FBV FBV(function based views) 基于函数的视图, 即一个url对应一个视图函数. 1.1 FBV代码示例 urls.py from django.contrib im ...