关于变量值和函数参数

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

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

  • 基本类型 (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

高阶函数 - Higher Order Function

一个函数 如果输入参数包含函数 或 返回值包含函数,就称为高阶函数。按fn与fn功能是否一致【即相同输入是否始终对应相同输出】,把这类高阶函数的作用分为两类:

Generator函数的语法和应用

状态机,封装了多个内部状态;返回一个遍历器对象,通过改对象可以一次遍历Generator函数内部的每一个状态;带*号,yeild表达式定义不同的内部状态;调用 Generator 函数后,该函数并不执行,返回的也不是函数运行结果

CSS calc()函数的用法

CSS3 的 calc() 函数允许我们在属性值中执行数学操作。例如,我们可以使用 calc() 指定一个元素宽的固定像素值为多个数值的和。如果你使用过 CSS 预处理器,比如 SASS

js闭包函数

闭包函数是一种函数的使用方式,这种函数的嵌套方式就是闭包函数,这种模式的好处是可以让内层函数访问到外层函数的变量,并且让函数整体不至于因为函数的执行完毕而被销毁。

js中回调函数,promise 以及 async/await 的对比用法 对比

在编程项目中,我们常需要用到回调的做法来实现部分功能,那么在js中我们有哪些方法来实现回调的?回调函数:首先要定义这个函数,然后才能利用回调函数来调用!

ES5中call,apply,bind方法总结

call,apply,bind这三个方法在JavaScript中是用来改变函数调用的this指向。那么改变函数this指向有什么用呢?我们先来看一段代码

ES6 Array.find()和findIndex()函数用法

ES6为Array增加了find(),findIndex函数。find()函数用来查找目标元素,找到就返回该元素,找不到返回undefined,而findIndex()函数也是查找目标元素,找到就返回元素的位置,找不到就返回-1。

Vue 中的 computed 和 methods 的使用

computed:在computed中的函数,是在dom加载后马上执行的;methods:在methods中的函数,必须要有一定的触发条件,才会执行 ,Vue.js 将绑定表达式限制为一个表达式,如果想要实现绑定多于一个表达式的逻辑

JS函数提升和变量提升

函数声明(function declaration),通过function 关键字,functionName函数名,arg参数(可选)定义的函数。函数表达式: 将函数声明赋值给一个变量,这个表达式叫做函数表达式

ES6箭头函数

传统的javascript函数语法并没有提供任何的灵活性,每一次你需要定义一个函数时,你都必须输入function () {},这至少会出现两个问题,ES6箭头函数都圆满解决了它,箭头函数内的this值继承自外围作用域。运行时它会首先到它的父作用域找,如果父作用域还是箭头函数

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

广告赞助文章投稿关于web前端网站点搜索站长推荐网站地图站长QQ:522607023

小程序专栏: 土味情话心理测试脑筋急转弯幽默笑话段子句子语录成语大全