独书先生 Menu

All items for 5月, 2019

js按值传递和按引用传递的区别 | 坑点提示

1.概念

按值传递: 函数内参数的值被改变,不影响外部的变量
按引用传递: 函数内参数的值被改变,影响外部的变量

2.例子

(1)按值传递

var a = 1;
function foo(x) {
x = 2;
}
foo(a);
console.log(a); // 仍为1, 未受x = 2赋值所影响

(2)按引用传递

var obj = {x : 1};
function foo(o) {
    o.x = 3;
}
foo(obj);
console.log(obj.x); // 3, 被修改了!

3.坑点提示

var foo = {name:'foo'};
function test(o){
   o = {name:'bar'};  
}
test(foo);
console.log(foo.name); // 'foo',没有被修改

分析

本来foo传入test方法,是可以在方法内部修改foo的属性的,但是在内部直接对形参o重新赋值了一个新的对象{name:’bar’},而对象赋值给o其实是赋值这个对象的地址,等于是把形参o的地址引用链接到了{name:’bar’},而此次赋值之前o是链接到外部foo对象上的,此操作等于是断开了o与foo对象的关系,所以并没有对foo造成修改。
所以,要想修改foo内部属性值,必须使用上述按引用传递的例子,使用 对象.属性 = 'XXX'的方式,如:o.name = 'bar'

参考自:https://www.cnblogs.com/QingChengFE/p/4543608.html,感谢!

npm常用命令及踩坑指南

记录常用的npm命令,不定期更新,欢迎继续关注

windows环境下:

1. 安装npm包

npm install jquery --save

2. 更新一个npm包

npm update jquery --save

3. 删除一个包

npm uninstall jquery --save

4. 安装指定版本的npm包

npm install jquery@2.2.4 --save

扩展: 如何区分–save 和–save–dev?

5. npm更新到最新

npm install npm@latest -g

6. npm降低版本

npm install npm@4 -g

7. 快速删除node_modules

npm install rimraf -g
rimraf node_modules

8. 报错:Node Sass could not find a binding for your current environment: Windows 64-bit with Node.js 8.x 如何处理?

npm rebuild node-sass
npm update

9. 报错:npm ERR! Error: EPERM: operation not permitted, rename 如何处理?

管理员模式运行cmd即可

10.使用淘宝镜像

  1. 临时使用
npm --registry https://registry.npm.taobao.org install koa
  1. 持久使用
npm config set registry https://registry.npm.taobao.org
  1. 通过cnpm
npm install -g cnpm --registry=https://registry.npm.taobao.org

11. 使用官方镜像

npm config set registry https://registry.npmjs.org/

12. 查看npm源地址

npm config get registry

更多npm技巧:
上传发布npm包步骤