js珠峰002

2020-02-29  本文已影响0人  小海豚嗷嗷

###用var 创建的变量也会给全局对象GO加对应的属性

### 创建函数 和 创建 变量 最好:  let  a  = 123; 表达式形式: let fn = function(){}(目的:避免变量提升,不符合正常逻辑,正常逻辑:初始化之后使用。否则恶心至极!!!)

var 与 let 区别:

1.是否变量提升(var 提升,let 不提升)

2.全局变量对象中声明的变量(用var声明)也会给全局对象GO中增加一个对应的属性(var a  = 12 ; console.log(window.x) //12;但是let a =12; console.log(window.x)//undefined),但是用let 声明的变量,则不存在这个特点。======》仅限于全局有创建全局变量给全局属性这个特点,私有的执行上下文中就是私有变量。

###注意:

编译阶段(编译器)

            =》词法解析 = 》AST抽象语法树(给浏览器引擎去运行的)

引擎执行阶段

            =》ECStack=>EC(G) =>VO(G)、GO(G)。。。

3.带var的可以重复声明(此法解析阶段可以审核过),执行阶段遇到已经声明过,不会再重新声明。但是let是不可以,词法解析阶段都过不去,也就不存在引擎去执行代码阶段了。(总结:可以说var并不严谨,所以在es6阶段,词法解析器会提前做一些规则处理eg:是否重复声明!!)

4.let存在块级作用域,var没有;除了对象的{},其他都可以理解为跨级作用域;eg:循环、判断、try..catch、swith、

5. typeof a (这里会提示:undefined)这是JS的暂时性死区(暂时没解决的bug)

let 与 const 区别(let创建的变量可以更改指针指向的(也就是可以重新赋值),但是const声明的变量不允许更改指针指向)

let  x  = 100  ; x=200

const y=100; y=200;   =>

***惰性函数  柯里化函数 单例模式

compose函数

上一篇 下一篇

猜你喜欢

热点阅读