关于变量值和函数参数

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

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

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

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

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

Generator函数

Generator 函数有多种理解角度。语法上,首先可以把它理解成,Generator 函数是一个状态机,封装了多个内部状态。执行 Generator 函数会返回一个遍历器对象,也就是说,Generator 函数除了状态机,还是一个遍历器对象生成函数。返回的遍历器对象,可以依次遍历 Generator 函数内部的每一个状态。

es6 函数的扩展

我们都知道声明函数可以设置形参,但你有没有想过形参也可以直接设置默认值,我们接下来看看如何去写,rest 参数官方注解:ES6 引入 rest 参数(形式为...变量名),用于获取函数的多余参数,这样就不需要使用arguments对象了。

JS 中构造函数和普通函数的区别

构造函数也是一个普通函数,创建方式和普通函数一样,但构造函数习惯上首字母大写、构造函数和普通函数的区别在于:调用方式不一样。作用也不一样(构造函数用来新建实例对象)

理解 JavaScript Mutation 突变和 PureFunction 纯函数

不可变性、纯函数、副作用,状态可变这些单词我们几乎每天都会见到,但我们几乎不知道他们是如何工作的,以及他们是什么,他们为软件开发带来了什么好处。在这篇文章中,我们将深入研究所有这些,以便真正了解它们是什么以及如何利用它们来提高我们的Web应用程序的性能。

JavaScript函数内部属性

函数内部有两个特殊对象,this、arguments,其中arguments是一个类数组对象,包含着传入函数中的所有参数,主要用来保存函数参数。arguments对象还有一个callee属性,callee是一个指针,指向拥有这个arguments对象的函数。

JavaScript 高阶函数快速入门

把函数以数据的形式去使用,并解锁一些强大的模式。接受和/或返回另外一个函数的函数被称为高阶函数。之所以是高阶,是因为它并非字符串、数字或布尔值,而是从更高层次来操作函数。

js中 is_NaN()函数的使用

isNaN() 函数用于检查其参数是否是非数字值。它是JavaScript提供的一个内置函数。这个函数使用了Number() 去转换需要判断的值。Number() 去转换值,如果有任意非数值字符存在则就不是一个数值

ES6新特性之箭头函数与function的区别

写法不同;在function中,this指向的是调用该函数的对象;而在箭头函数中,this永远指向定义函数的环境。箭头函数不可以当构造函数;function存在变量提升,可以定义在调用语句后;箭头函数以字面量形式赋值,是不存在变量提升的;

JS中的setTimeout()函数

setTimeout() 方法用于在指定的毫秒数后调用函数或执行表达式。返回一个 ID(数字),可以将这个ID传递给 clearTimeout() 来取消执行。第三个及之后的参数是setTimeout()函数的可选参数,是作为参数传给 setTimeout() 方法里面的匿名函数或者调用的函数

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

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

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