二、变量作用域范围

[复制链接]
查看1720 | 回复0 | 2021-3-5 17:05 | 显示全部楼层 |阅读模式
目前,JavaScript,ES5提供两种作用域类型:全局变量及函数作用域,没有块作用域。块作用域的范围不太明确,所以应当避免块作用域的使用。如下代码,尽管是开发人员常用的Pattern,却是一个陷阱。

  1.           function
  2.            foo() {
  3.          

  4.            
  5.           for
  6.            (
  7.           var
  8.            i=0; i < 10; i++) {
  9.          

  10.            
  11.           ...
  12.           // do something with i
  13.          

  14.            
  15.           }
  16.          

  17.           }

复制代码
所有的变量声明最好是在函数的开始位置。在JS,ES6版本中支持块作用域,采用关键字let 定义变量。

严格模式(Strict Mode)
从ES5开始, 严格模式用于检测运行时的错误,在严格模式下,所有的变量必须声明,如果给未声明的变量赋值会抛出异常。

在JavaScript 文件或<Script>元素内,通过输入以下代码切换到严格模式:

use strict;
建议采用严格模式,除非项目依赖的库不兼容严格模式。

多种对象
JS中的对象概念不同于OO或UML中的对象,尤其是在JS中对象不需要实例化,也可以有自己的方法,不仅有property slots,也包含method slots。除此之外还包含key-value slots;因此他们总共有三种Slots, 而常见的对象只有属性槽。

JS对象是由一系列的name-value 组成的Slot。而name 可以是属性名称,函数名称,映射名称。对象可通过一种特定的方式创建,使用JS 对象声明语法(JSON),而不需要实例化一个类。代码如下:


  1. var
  2.            person1 = { lastName:
  3.           "Smith"
  4.           , firstName:
  5.           "Tom"
  6.           };
  7.          

  8.           var
  9.            o1 = Object.create(
  10.           null
  11.           );
  12.           // an empty object with no slots

复制代码
如果Slot 的name 是合法的JS 标识符,则Slot可表示属性,方法,或键值对。如果名称含有一些特殊字符如空格,则Slot代表键值对,是一种映射元素,如下:

Property Slot  中的name:

1. data value 属性,在这种情况下,Value 表示变量值,或是值表达式。

2. object-valued 属性,Value 表示对象的引用或对象表达式。

method Slot 表示的是JS 函数,它的值是JS 函数定义表达式:

Object 属性可以使用两种方法来访问:

1. 使用”.”(与C++ 和Java的类似):
  1. person1.lastName =
  2.           "Smith"
复制代码
2. 使用map:

  1. person1[
  2.           "lastName"
  3.           ] =
  4.           "Smith"
复制代码

JS 对象能够用于各种途径,以下是五种常见情况:

1. Record是Property slots集合,如:

  1. var
  2.            myRecord = {firstName:
  3.           "Tom"
  4.           , lastName:
  5.           "Smith"
  6.           , age:26}
复制代码



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

UID
434
贡献
3
丢币
0
主题
59
回帖
0
注册时间
2021-2-21
最后登录
2021-12-28