js中函数参数基本类型和引用类型的区别

高级程序设计中说明,所有函数的参数都是按值传递的。

基本类型

向参数传递基本类型的值时,被传递的值会被复制给对应的命名参数

function addTen(num){
    num=+10;
    return num;
}
var count=20;
var result=addTen(count);
alert(count);//20

在函数内部,num的值被加上10,但不影响外部count变量的值

引用类型

在向参数传递引用类型的值时,把这个值在内存中的地址复制给对应的局部变量,如果这个局部变量没有重新赋值,那它在函数内部的变化将反应到外部

function setName(obj){
  obj.name="nichos";
}
var person={
  name:"richas"
};
setName(person);
alert(person.name);//nichos

如果被重新赋值给新的对象,这之后变化将不影响外部的变化。

function setName(obj){
  obj.name="nichos";
  obj=new Object();
  obj.name="new name";
}
var person={
  name:"richas"
};
setName(person);
alert(person.name);//nichos

下面再转个网友的个例子

 var ftn1 = function(){

        console.log("test:ftn1");

    };

    var ftn2 = function(){

        console.log("test:ftn2");

    };

    function ftn(f){

       f();

       f = ftn2;

    }

    ftn(ftn1);// 运行结果:test:ftn1

    console.log("====================华丽的分割线======================");

    ftn1();// 运行结果:test:ftn1

为什么不是test:ftn2,那是因为参数f被赋值给f2对象的地址后,跟外面的f1已经没关系了,所以结果还是f1

 var ftn1 = function(){

        console.log("test:ftn1");

    };

    var ftn2 = function(){

        console.log("test:ftn2");

    };

    function ftn(f){

       f();//test:ftn1

       f = ftn2;
       f();//test:ftn2

    }

    ftn(ftn1);// 运行结果:test:ftn1

    console.log("====================华丽的分割线======================");

    ftn1();// 运行结果:test:ftn1
时间: 2024-08-02 15:14:20

js中函数参数基本类型和引用类型的区别的相关文章

[转]javascript中基本类型和引用类型的区别分析

基本类型和引用类型 ECMAScript包含两个不同类型的值:基本类型值和引用类型值.基本类型值指的是简单的数据段:引用类型值指由多个值构成的对象.当我们把变量赋值给一个变量时,解析器首先要做的就是确认这个值是基本类型值还是引用类型值. 常见的五种基本数据类型是: Undifined.Null.Boolean.Number和String.这五种基本数据类型可以直接操作保存在变量中的实际值. 看下面例子: ? 1 2 3 4 5 6 7 8 9 var a = 10; var b = a;    

javascript中基本类型和引用类型的区别分析

大多数人系统学习过的程序设计语言,在这些语言的学习过程中最早学到的几个要点之一就是值类型和引用类型的区别.下面我们来看一下在 JavaScript 中基本数据类型(Primitive Types)和引用类型(Reference Types)的区别.. 基本类型和引用类型 ECMAScript包含两个不同类型的值:基本类型值和引用类型值.基本类型值指的是简单的数据段:引用类型值指由多个值构成的对象.当我们把变量赋值给一个变量时,解析器首先要做的就是确认这个值是基本类型值还是引用类型值. 常见的五种

JavaScript—基本类型和引用类型的区别

在看js高级程序设计时,发现这部分虽然简单,但是我自己有些地方经常混淆,总结如下: (一)基本概念 JS中可以把变量分成两部分,基本类型和引用类型. 基本类型比较简单,包括:Undefined.Null.Boolean.Number和String,基本类型值就是简单的数据段:引用类型值可能由多个值构成的对象. 引用类型值保存在内存中,而JS是不能直接访问内存的,所以对于引用类型,操作的不是实际的对象而是对象的引用. (二)基本类型值和引用类型值的区别 a.动态属性 只能给引用类型值动态的添加属性

【js】基本类型和引用类型的区别

1.保存方式:(一脸懵逼???) 基本类型是按值访问的,可以在变量的生命周期改变它,但是它是储存在哪里的呢?在浏览器缓存吗?[执行环境中定义的所有变量和函数都存储在执行环境的变量对象里,变量对象我们编写的代码无法访问,但是解析器在处理数据的时候会在后台调用] 引用类型的值保存在内存中,js对访问内存位置有所限制(这种限制如何理解?),当我们复制的时候操作的是对象的引用,当我们为对象删除或添加属性的时候,操作的是实际的变量. 2.动态的属性: 引用类型可以添加删除修改属性,而基本类型没有属性 3.

php与js中函数参数的默认值设置

php函数参数默认值设置: <?phpfunction test($val=3){   echo $val."<br/>";}test(11);test();?> javascript函数参数默认值设置function test(){alert("test函数");} function test2(val,func){ val=val||"";//利用js中的或操作,第一个参数值为false(为空)时返回第二个参数的值.第

python中函数参数*args和**kw的区别

1.函数与参数(实参) 在python中创建函数是def,创建函数名是def f(),f函数名字,def f(a,b),这里的a,b是两个参数,函数名是自定义的,参数也是自定义,随意就好.看图如下效果: 这里f(1,2)是实参,然后调用上面的函数. 下面讲解下*args和**kw的区别. 2.*args 这里的*后面的值是自定义的,只要不是数字就行,定义成*abc,*ccc都可以,len()是函数,它的意思是返回字符串长度.然后前面的a,b是普通参数,print a print b就是回显1,2

Javascript中的基本类型和引用类型

一.基本类型和引用类型概述 js中数据类型的值包括:基本类型值和引用类型值 基本数据类型:undefined;null;boolean;number;string 引用类型值:保存在内存中,js不允许直接访问内存位置,因此时操作引用而不是实际对象 二.如何检测数据类型 1.基本数据类型的检测:使用typeof var s = "AAA"; alert(typeof s); //返回string `     2.引用类型(对象类型)检测:使用instanceof alert(person

基本类型和引用类型

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "PingFang SC" } p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "PingFang SC"; min-height: 1

js中的基本类型和引用类型

基本类型:指的就是简单的数据段 基本类型种类:number.string.null.undeinfed.boolean 基本类型的值是不可变的,存放在内存中的栈中 引用类型:其实引用类型就是对象,对象拥有属性和方法.属性又包含基本类型和引用类型 引用类型的的值不能改变的,存放在内存中的堆中 原文地址:https://www.cnblogs.com/niuyixiao/p/9430502.html