JavaScript新手学习笔记4——我记不住的几个坑:短路逻辑、按值传递、声明提前?

1.短路逻辑

  逻辑运算中,如果前一个条件已经可以得出最终结论,则后续所有条件不再执行!这里的逻辑运算指的是逻辑与和逻辑或。

  我们要理解逻辑与是两个条件都为真的时候,才为真,如果第一个就是假的,那么后面一个也不用执行了。逻辑非是两个条件中有一个是真,则结果为真,所以只要第一个为真,那么结果为真,后面一条语句就不用执行了。于是又如下例题:

console.log(2&&3);    //3
console.log(2||3);    //2
console.log(0&&1);    //0
console.log(0||1);    //1

2.按值传递

  两变量间赋值或向函数中传递参数时,都是将原变量的值复制一个副本给对方,修改其中一个,另一个不会改变。(这里想比喻成伏地魔的七个魂器,但不知道每毁掉一个魂器,伏地魔会受到影响吗?哈利波特脑残粉。。)。 

var a = 10;
var b = a;
a++;
console.log(b);   //10

  但是引用类型的值传递,传递的仅仅是引用地址,所以修改其中一个的值,另外一个也会跟着变。就好像一间屋子配置了两把钥匙,其中一个打开门,把钱全部拿走,另外一把钥匙打开门后,钱已经没有了。

var a=[1,2,3,4];
var b=a;
a.pop();
console.log(b);   //1,2,3

3.函数声明提前

  在正式执行程序前,都会预先把所有的var声明的变量和function声明的函数,集中到当前作用域的顶部集中声明。但是赋值留在原地。

function fun(){
 return 1;   
}
console.log(fun());    //2
function fun(){
 return 2;   
}
console.log(fun());    //2
var fun=100;
console.log(fun());     //报错