范围范围 范围范围 范围
历史上, JavaScript 被混淆了函数的范围。 有时它们看起来是静态的范围, 但有些特征让它们表现得好像是动态的范围。 这使得程序很难读懂和理解。 错误理解导致错误。 这也是一个性能问题。 静态范围界定允许在编译时发生可变的约束力, 但动态范围要求意味着约束必须推迟到运行时间, 而运行时间会受到重大的性能处罚 。
严格模式要求所有变量都固定绑定。 这意味着以前需要动态绑定的特征必须取消或修改。 具体地说,配有语句的功能被删除,而电子逆向拍卖功能改变其呼叫者环境的能力受到严重限制。
严格守则的一个好处就是 诸如YUI YUI 压缩器处理时可以做得更好。
隐含的全球变量
JavaScript 隐含了全球变量。 如果您没有明确声明变量, 则会暗含地声明一个全球变量。 这样可以让初学者更容易编程, 因为他们可以忽略一些基本的家务。 但这会让大型程序的管理更加困难, 并大大降低可靠性。 因此严格地说, 隐含的全球变量不再创建。 您应该明确声明所有变量 。
全球渗漏
有一些情况可能导致this
被约束对象。例如,如果您忘记提供new
调用构建器的构造器函数时的前缀this
会被意外地绑定到全球对象上, 所以它不会启动新对象, 而是静静地干扰全球变量。 在这种情况下, 严格的方式将会约束this
至undefined
,这将导致构建者提出一个例外,使错误能够更快地被检测出来。
吵闹失败
JavaScript 一直拥有只读的属性, 但直到 ES5 的属性, 您无法自己创建这些属性 。Object.createProperty
函数暴露了该功能。如果您试图为只读属性指定一个值,它会默默地失败。该配置不会改变该属性的价值,但您的程序会像原计划一样进行。这是一个完整性危险,可能导致程序出现不一致状态。严格地说,试图改变只读属性将是一个例外。
八进
数字的八进制( 或基数 8) 表示在对单词大小为 3 倍数的机器进行机器级程序时非常有用。 您在与CDC 6600 主机合作时需要八进制, 该主机的单词大小为 60 位数。 如果您可以读八进制, 您可以将一个单词看成 20 位数。 两位数字代表了操作代码, 8 个登记册中的一位数识别了其中一位数。 在机器代码向高级语言的缓慢过渡期间, 以编程语言提供八进制格式被认为是有用的 。
在C中,选择了极不幸的八进制表示:领先零。在C中,0100
指64, 不是100, 和08
更不幸的是,这种过时主义已经被复制为几乎所有现代语言,包括JavaScript, 在那里它只用来制造错误。它没有任何其他目的。 所以严格地说, 八进制不再被允许。
爱 爱 爱 爱 爱 爱 爱 爱 爱 爱 爱 爱 爱 爱 爱
在ES5中,伪参数数组变得有点像 ES5 中的阵列。callee
和caller
属性。这样就可以通过您的arguments
在不放弃很多保密背景的情况下 不受信任的代码。arguments
职能财产被删除。
在严格模式下,函数字典中的重复键将产生语法错误。函数不能有两个相同名称的参数。函数不能有一个与其参数之一具有相同名称的变量。函数不能有相同名称的变量。delete
试图用它自己的变量delete
非可配置财产现在被抛出一个例外。 原始价值不是暗含的。