你不知道的JavaScript (上)

一、编译的原理主要分为三个步骤:

1、分词/词法分析:这个步骤主要是将字符串分解成有意义的代码。

2、解析/语法分析:数组嵌套形成结构树。

3、代码生成:将结构树转化为代码的过程。

二、作用域

引擎主要进行搜索查询编译等过程,分为左查询LHS和右查询RHS;

编译器主要是进行代码的生成,语法分析。

作用域主要是 确定访问权限,收集维护所有声明的标识符。

作用域的具体体现:




1、包含整个作用域,其中只有一个标识符:foo.

2、包含foo创建的作用域,其中包含三个标识符,b ,a,bar

3、包含bar创建的作用域,只有一个标识符:C


三、欺骗词法

欺骗词法作用域会导致性能下降,典型的试eval,with

eval()可以在写的代码中用程序生成代码并运行,好像代码就写在这个位置,这就是所谓的欺骗词法。

全局eval,可以动态执行代码,申明或者改变变量,可以更改局部变量,在严格模式下,eval相当于一个运算符,可以使用别的来覆盖;

eval 只有一个参数,如果传入的不是字符串的话,它直接返回这个参数;如果是字符串,那么首先会进行编译,如编译失败则爆出语法错误;编译成功则执行代码。


with可以引用特定对象中已有的属性,不能给对象添加属性,如果给对象创建新的属性,必须明确的引用该对象。


四、作用域中let和const的区别

let将变量绑定到所在的任意作用域中(通常是{}内部);

const主要是用来创建固定值的作用域变量;

五、变量提升机制

变量的提升主要涉及到编译器的编译和执行两部分,编译器的编译部分涉及到LHS和RHS两部分。

过程就像变量和函数声明从代码出现的位置被移动到最上面,被提升的顺序是函数先被提升,然后才是变量提升。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值