你不知道的JavaScript上卷第一章 作用域是什么?(前端小白学习录)

302 阅读2分钟

作用域

  1. 什么是作用域? 作用域是在运行时代码中的某些特定部分中变量,函数和对象的可访问性。换句话说,作用域决定了代码区块中变量和其他资源的可见性。
  2. 全局作用域和函数作用域 定义在全局下的变量拥有全局作用域,全局变量可以在全局中任何一个地方调用此变量。在函数里定义的变量拥有函数作用域,函数里定义的变量只能在函数里调用。在ES6开始,引入了let,const,就提供了块级作用域。

辅助操作中的LHS和RHS查询

      function foo(a) { 
    	var b = a;
    	return a + b; 
    	}
  		var c = foo( 2 );

LHS和RHS指的是赋值操作的左右侧,LHS查询指的是试图找到变量的容器本身,RHS查询就是找某个变量的值。以上案例的LHS查询进行了三次,RHS查询进行了四次。

例如:

	var a = 2

不成功的RHS引用会导致抛出ReferenceError异常。不成功的LHS引用会导致自动隐式地创建一个全局变量(非严格模式下),该变量使用LHS引用的目标作为标识符,或者抛出ReferenceError异常(严格模式下)。 var a 得到的结果是 a = undefind,而var a = 2右侧赋值不正常时,RHS才会抛出异常。

严格模式

ECMAScript 5的严格模式是采用具有限制性JavaScript变体的一种方式,从而使代码显示地 脱离“马虎模式/稀松模式/懒散模式“(sloppy)模式。 严格模式不仅仅是一个子集:它的产生是为了形成与正常代码不同的语义。 不支持严格模式与支持严格模式的浏览器在执行严格模式代码时会采用不同行为。 所以在没有对运行环境展开特性测试来验证对于严格模式相关方面支持的情况下,就算采用了严格模式也不一定会取得预期效果。严格模式代码和非严格模式代码可以共存,因此项目脚本可以渐进式地采用严格模式。 严格模式对正常的 JavaScript语义做了一些更改。 严格模式通过抛出错误来消除了一些原有静默错误。 严格模式修复了一些导致 JavaScript引擎难以执行优化的缺陷:有时候,相同的 代码,严格模式可以比非严格模式下运行得更快。 严格模式禁用了在ECMAScript的未来版本中可能会定义的一些语法。