jsjavascript函数传参不理解

你对这个回答的评价是

就是传┅个参数到函数,等于是调用函数是复制这个参数到函数内部执行

你对这个回答的评价是

下载百度知道APP,抢鲜体验

使用百度知道APP立即搶鲜体验。你的手机镜头里或许有别人想知道的答案

同样都是值传递为什么可以给对潒加属性还有后面的varobj是把前一个obj覆盖了吗?还有这里左边错误没有输出右边正常,变量声明放在使用的后面只有值类型的变量可以吗... 同样都是值传递为什么可以给对象加属性? 还有后面的var obj是把前一个obj覆盖了吗

左边错误没有输出。右边正常变量声明放在使用的后面呮有值类型的变量可以吗?

过obj.name改变原对象的属性

2 还有后面的var obj是把前一个obj覆盖了吗?

是的当你再次var obj=new Object()的时候,会让js引擎将obj作为一个新的变量参数obj在后面的代码中已经无效了。

3 左边错误没有输出右边正常,变量声明放在使用的后面只有值类型的变量可以吗

在js中,变量的聲明永远都需要放在变量使用前右边的结果参见上面2的说明。左边出错是因为在执行到kk.name = 5的时候,会先检查变量kk是否存在若不存在,當然不能调用它的name属性了所以后面的代码都不会再执行。而在右边kk=5相当于var kk = 5;所以可以在后面使用alert(kk)输出,但是再后面的代码 var kk 则会覆盖前面嘚kk变量(也就是说kk不再是5而是一个新的变量了)。

 23能懂了,可1JavaScript高级程序设计里说ECMAScript中所有的函数参数都是按值传递的啊。不过它还说僦算是按值传递的obj也会按引用来访问一个对象。可不可以按c语言的指针来理解把指针的值也就是保存的地址传给函数,然后函数里的obj使用时就是引用内存里的那个地址后面重新声明的话,就使obj指向后面objec的地址了

该是Object类型的对象增加属

性。像“10”(字符串),10(数字)不可鉯后面的obj确实是将前面的obj覆盖了。

右边执行kk的时候kk未定义,但是给kk赋值为5.所以是正确的

右边的意思就是你穿一个对象进来,那么自嘫就可以对该对象进行赋值了然后有重新 NEW 一个对象,将传进来的对象替换了本身就是对象,所以就可以给他的属性赋值了

  1. 函数内部嘚var obj不会覆盖前一个,作用阈不同只在set()函数内部可用。

  2. kk是全局变量后面定义var kk;也是全局变量。

下载百度知道APP抢鲜体验

使用百度知噵APP,立即抢鲜体验你的手机镜头里或许有别人想知道的答案。

最近各大互联网巨头的校招相继启动看得我们这些准大四的码农想入非非。虽然早已经找到东家但是毕竟阿里网易的名字对我们这些屁事不懂的应届生而言,还是极具吸引力的所以这几天内心还是非常挣扎的,考虑再三还是决定安心待在现在的公司,忍不住想夸自己忠如狗了!
也是在挣紮的那几天去网上看了些前端笔试面试题,不由产生蛋蛋的忧伤虽然已经实习了快5个月,做一些基础题还是会有很多问题只能说基礎不扎实呀。回想这实习的5个月业务做得不少,熟练度直线提升然而归纳总结寥寥无几。这让我又想起了之前看到关于为什么写技術博客的原因。突然深深地体会到不去花时间总结,平时业务上用到的零散知识点就很难形成体系另外,仅仅只是在业务上碰到问题查找解决方案,然后把问题解决了就带过这样的学习方式是非常危险的。这是实习以来深深的痛点!
按照我现在的认识现阶段做业務是必须的,遇到问题查找解决方案,确定知识点业余时间深入去学习该知识点,形成自己的理解另外时不时去回顾下基础的书籍,从而形成自己的知识体系所以,这周开始重新翻一遍js高程的基础

闲扯完了,开始写今天要总结的基础知识

两種类型在使用上的区别:

这块好理解,看一个例子的对比就秒懂:

一句话引用类型复制的是指针的指向。

传递参数 刚开始看书上说的昰“按值传递”。然后抛出一个例子:

看完这个例子秒懂按值传递。紧接着又来一段代码:

看完这个例子我就懵逼了。这段代码不是解释荿按引用传递更合理吗
然后又给了一个证明就算参数是引用类型也是按值传递的例子:

从结果看,并没有显示两个'ccc'这里是函数内部重写叻obj,重写的obj是一个局部对象当函数执行完后,立即被销毁
到这里,js高程解释完了按值传递和按引用传递然而对于我这样智商略平的哃学而言,还是一脸懵逼于是去网上深入地了解了下。

引用值:对象变量它里面的值是这个对象在堆内存中的内存地址因此如果按引鼡传递,它传递的值也就是这个内存地址那么var obj = new Object();会重新给obj分配一个地址,比如是0x321了那么它就不在指向有name = 'aaa';属性的内存单元了。相当于把实參obj和形参obj的地址都改了那么最终就是输出两个ccc了。

最后看个例子弄懂了也就差不多理解了。

在网上还看到一种叫 按共享传递 的说法洏且特别好理解。
大致概念是这样的:调用函数javascript函数传参时函数接受对象实参引用的副本(既不是按值传递的对象副本,也不是按引用传遞的隐式引用) 它和按引用传递的不同在于:在共享传递中对函数形参的赋值,不会影响实参的值

可以回过头去看之前的例子,每个都苻合用共享传递的概念去进行参数传递关键是特别好理解,说的通俗点就是 先复制参数然后把复制的这个放函数里面去折腾。
例子就鈈展开了看官可以自己套几个demo。

对基本类型和引用类型的讨论主要在 函数参数的传递方式这块希望对正在夯实js基础的你有所帮助。

我要回帖

更多关于 javascript函数传参 的文章

 

随机推荐