运算符(operator)也被称作操作符,是用于实现赋值,比较和执行算数运算等功能的符号。
前置递增运算符:
++p 先加1 在进行赋值操作,分为三步,var p , p +1, p = p+1;
后置递增运算符:
p++ 先返回原值,在进行加1,分为三步,var p , p = p; p= p+1
console.log(p++,10); console(p);
个人理解:前置递增运算符跟后置递增运算符都是一种表达式,所以我们要注意表达式的返回的结果都是一样的效果,区别在于变量的变化,后置递增运算符比较有点难理解,应该这样去理解,
var c =10; c++; console.log(c++ + 10);
以上c++的预算结果是11, 但是console.log(),c++表达式是返回c的值是11 + 10 是21,c的值最后是12.怎么理解呢,就是c++ 参与的计算过程中,c的变量的值先去参加运算,最后的C的变量在自增1.。换句话说,C++会先返回原值,再去进行+1操作,中间如果表达式参与了别的运算,先去拿表达式返回的原值去参与运算。
javascript 函数
如果在函数内部,没有声明的变量,直接赋值的变量也是全局变量。
js在es6的时候新增的块级作用域
作用域链:内部函数访问外部函数的变量,采取的是链式查找的方法。
javascript预解析
javascript代码是由浏览器中javascript解析器来执行的。javascript解析器在运行javascript代码的时候分为两步:预解析和代码执行。
预解析js引擎会把js里面所有的var还有function提升到当前作用域的最前面。
代码执行 按照书写的顺序从上往下执行。
预解析分为变量预解析(变量提升) 和 函数预解析(函数提升)
变量提升 :就是把所有的变量声明提升到当前的作用域最前面 不提升赋值操作。