chengtongpo 发表于 2021-3-5 17:05

二、变量作用域范围

目前,JavaScript,ES5提供两种作用域类型:全局变量及函数作用域,没有块作用域。块作用域的范围不太明确,所以应当避免块作用域的使用。如下代码,尽管是开发人员常用的Pattern,却是一个陷阱。

          function
         foo() {
         

         
          for
         (
          var
         i=0; i < 10; i++) {
         

         
          ...
          // do something with i
         

         
          }
         

          }

所有的变量声明最好是在函数的开始位置。在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),而不需要实例化一个类。代码如下:


var
         person1 = { lastName:
          "Smith"
          , firstName:
          "Tom"
          };
         

          var
         o1 = Object.create(
          null
          );
          // 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的类似):
person1.lastName =
          "Smith"2. 使用map:

person1[
          "lastName"
          ] =
          "Smith"JS 对象能够用于各种途径,以下是五种常见情况:1. Record是Property slots集合,如:var
         myRecord = {firstName:
          "Tom"
          , lastName:
          "Smith"
          , age:26}

页: [1]
查看完整版本: 二、变量作用域范围