首页

杂谈js和php的变量赋值区别

一直以来都是实用至上的理念来自学编程的,为了兴趣和想做的东西而学习。这种学习模式的好处就是学效率比较高,开发也顺手。不好的地方也很明显:路子野、只学自己开发所需要的东西、学的知识不够系统。其实很多很多基础概念根本没弄明白,比如这个最基础的变量传递赋值的差异。 在PHP里面就是普通的变量传递,当$a=1 $b=$a 的时候$b的值就是1,相当于把$a的值copy了一份赋给了$b,此后$a和$b没有其他的关联。比如接下来写$b=2,那么$a的值依然是1跟$b没有关系。如果是js则大有不同,var a=1后接着写var b=a那么a和b两个变量其实指向的是同一个内容,包括原型链。当你接着写b=2的时候a的值也会变成2,如果申明的是个对象并且使用了双向绑定不清楚这个特性的话就会遇到更多奇怪的bug。 其实js这种赋值在php里面是引用赋值,等同于 $a = 1; $b = &$a;很多时候js的这种赋值的方式并不方便,比如a是个对象我只是想要a的值传给b可能常见的做法只能是var b = Object.assign({},a)这种合并空对象的办法。 <code> //php示例 $a = [1,2,3]; $b = $a; //a赋值给了b $a = [1,3]; //改变了a的值 var_dump($b); //b并没有变化 //js示例 var a = [1,2,3]; var b=a; a.pop(); //a删除了一个元素变成了[1,2] console.log(b); //b也变成了[1,2], 同理:b.push(3)增加一个元素a也会跟着变 a = [7,8,9]; //a重新赋值 console.log(b); //b没有变化,a重新赋值不会改变b //结论 /** js里面的传参类似于php里面的引用传参,普通的a=b变量间赋值等约等于 $a = &$b; 却不完全相同**/ </code>
更多>>
解决DNS解析慢的后续 mysql导入大sql文件 服务器报 -bash: cannot create temp file for here-document: No space left on device 苹果销售数据API报错FORBIDDEN.REQUIRED_AGREEMENTS_MISSING_OR_EXPIRED GuzzleHttp报错信息不完整,异常被信息被截断,而且需要完整错误信息