关闭

关于变量值和函数参数

时间: 2019-01-09阅读: 1144标签: 函数

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

  • 基本类型 (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指向的内存地址改变,那之后更改对象内的属性,对函数外是没影响的

来自:https://www.cnblogs.com/mlcat/archive/2019/01/09/10242306.html

站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

2.广告联盟: 整理了目前主流的广告联盟平台,如果你有流量,可以作为参考选择适合你的平台点击进入

链接: http://www.fly63.com/article/detial/1801

关闭

Js中函数式编程

最近和做技术的朋友聊天的时候,发现自己居然不能将函数式编程思想讲清楚,于是做一次复习,常常都能听到这么一句话:在 JavaScript 中,函数是“一等公民”,这句话到底意味着什么?

Javascript之尾调用

尾调用是函数式编程的一个重要的概念,本篇文章就来学习下尾调用相关的知识。有说过在一个函数中输出一个函数,则这个函数可以被成为高阶函数。本文的主角尾调用和它类似,如果一个函数返回的是另一个函数的调用结果,那么就被称为尾调用。

js构造函数:实例与new对象

构造函数函数特点1.函数体内使用了this关键字,代表了所要生成的对象实例2.生成对象的时候必须使用new命令3每个函数都自动添加一个名称为prototype属性,这是一个对象4每个对象内部都有一个属性_proto_

JS ES6中的箭头函数(Arrow Functions)使用

ES6可以使用“箭头”(=>)定义函数,注意是函数,不要使用这种方式定义类(构造器)。typeof运算符和普通的function一样,instanceof也返回true,表明也是Function的实例

ES6中箭头函数

ES6 允许使用“箭头”(=>)定义函数。如果箭头函数不需要参数或需要多个参数,就使用一个圆括号代表参数部分。函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。

理解与使用JavaScript中的回调函数

在JavaScript中,函数是第一类对象,这意味着函数可以像对象一样按照第一类管理被使用。既然函数实际上是对象:它们能被“存储”在变量中,能作为函数参数被传递,能在函数中被创建,能从函数中返回。

JS 自执行函数

由于自己js基础知识薄弱,很多js的知识还没有掌握,所以接下来会经常写一些关于js基础知识的博客,也算给自己提个醒吧。js自执行函数,听到这个名字,首先会联想到函数

JS中function

在js程序开始执行前,引擎会查找所有var声明的变量和function声明的函数,集中到当前作用域顶部集中创建,赋值留在原地;声明方式创建函数--会被声明提前

JavaScript中的函数式编程

函数式编程是一种编程范式,是一种构建计算机程序结构和元素的风格,它把计算看作是对数学函数的评估,避免了状态的变化和数据的可变

js查找和筛选的几种方式

find() 方法返回通过测试(函数内判断)的数组的第一个元素的值。find() 方法为数组中的每个元素都调用一次函数执行;findIndex() 方法返回传入一个测试条件(函数)符合条件的数组第一个元素位置。

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!