* 预解释

* 预解释

* 什么是预解释

* 关于预解释: 带var和带function不同

* 函数执行四阶段

* 作用域链

* 预解释无节操

* 闭包

* 运算符

* 栈内存和堆内存

* 堆内存和栈内存 的销毁

* this的总结

* ||或者 &&并且

预解释

什么是预解释

变量:

1.声明一个变量 var       var 变量名 = 变量值;

2.=  赋值:将等号右边的变量值赋值给等号左边的变量名

3.变量的作用:存储值和代表值的

1:什么是预解释

在当前作用域下,在JS代码执行之前,浏览器会对带var和带function的进行提前声明或定义

关于预解释: 带var和带function不同

1:带var和带function不同

1)带var 只声明,不定义 var a;告诉浏览器有个变量叫做a,关于a的内容不知道

2)带function 声明加定义  var fn=xxxfff

2:带var和不带var的区别:

1 带var:   1) 在全局环境下,属于window的全局属性 2)带var会进行预解释

2 不带var:  1)属于window的全局属性 2)不带var不会进行预解释;

3:私有变量有2种:

1)当前作用域下,带var的;           2)形参;

函数执行四阶段

1)形成一个私有作用域

2)形参赋值

3)预解释

4)代码从上到下执行

4:函数返回值出现undefined的情况有两种

1)没有写return

2)写了return但是没赋值

作用域链

作用域链

当函数被调用的时候,会形成一个私有作用域,我们看该私有作用域下,是否有私有变量A

1)如果有私有变量A,那么该作用域中的A,都是私有变量跟外界没有任何关系

2)如果没有私有变量A,到上级作用域查找,如果没有继续往上找,找到window还没有的话,报错

预解释无节操

预解释无节操

1)只对等号左边带var的,声明但是不定义

2)已经声明过的,不会重复声明,但是重新赋值

3)在预解释阶段,函数的优先级大于变量

4)条件判断语句中,无论条件是否成立,都会进行预解释  (注意:条件为真,执行代码,条件不成立,输出的是全局变量)

5)return 后面的语句不会进行预解释 ,return下面的语句,虽然不执行,但是会进行预解释

6)匿名函数不进行预解释

7)自执行函数不会进行预解释,只有执行到他的时候,声明+定义+调用 同步完成

(function (n){ 形参

自执行函数只执行一次,传参一次 ,自执行函数也是匿名函数

return function(){

}

})(i)实参

obj.fn();        obj.fn执行的是return后面函数

执行的是return后面的函数

闭包

闭包

函数形成一个新的私有作用域保护里面的私有变量不受外界的干扰(外界修改不了私有的,私有的也修改不了外面的),这种保护机制叫做闭包

运算符

运算符

1)+  两边遇到字符串--》字符串拼接

1+'zfpx'  "1zfpx"

2)- * / 如果计算不成功--》NaN

1-'zfpx'  NaN

运算符的优先级

1圆括号

2算数运算符

3逻辑与&&>逻辑或||

4比较运算符 == != ===  !==

5;三元运算符

6;赋值操作

运算符的优先级

算数运算符 大于 比较运算符 大于 逻辑 大于 赋值

栈内存和堆内存

栈内存和堆内存

栈内存: 提供一个供JS代码执行的环境(里面可以放轻量级的数据;基本数据类型)

栈内存有全局作用域 和私有作用域

堆内存:存放引用数据类型

对象数据类型:键值对

函数数据类型:代码字符串

堆内存和栈内存 的销毁

堆内存和栈内存 的销毁

1) 堆内存;让占用内存地址的变量,指向ary=null; var=[1,3]

2)栈内存;全局作用域和私有作用域

在浏览器加载完html页面的时候,全局作用域就形成了;

全局作用域销毁;关闭浏览器,关闭当前页面

3)私有作用域

销毁:在一般情况下,当函数执行完成的时候,默认会进行销毁,有两种特殊情况不销毁

1)不销毁:当函数体内有东西被外面的变量或其他占用的时候,该函数不销毁

2)不立即销毁 :当函数执行完成的时候,会返回一个函数的定义阶段,這个返回的函数还需要再次调用,只有等所有的函数都调用完成,這个大函数才能销毁

this的总结

this的总结

1)当元素身上的事件被触发的时候,会执行一个函数,函数中的this;指向当前這个元素

2)函数被调用的时候,看前面是否有..点前面是谁,this就是谁--没点就是window

3)自执行函数中的this,永远都是window  定时器种的this一般默认为window (自执行函数就是匿名函数)

4)回调函数中的this一般默认为window

5)构造函数中的this 永远是实例

6)当遇到apply,bind,call的时候,以上统统失效

||或者 &&并且

12:||或者 &&并且

||  或者 只要有一个真 整体即为真

&& 并且 两边的小条件都为真,整体即为真

先算且&&  再算或||

- 1.且和或的用法:

+ &&:前面为真,才会走后面;

+ cb && cb();

+ ||:前面为假,才会走后面;

+ var l=left||200;

+  &&如果两边为具体的值:(为假的值:0 '' null NaN undefined)

如果第一个为真 返回第二个

如果第一个为假 返回第一个

+  ||如果两边为具体的值:(为假的值:0 '' null NaN undefined)

如果第一个为真 返回第一个

如果第一个为假 返回第二个

+ && ||如果两边为条件  返回false 或者true

你可能感兴趣的:(* 预解释)