不要老叹息过去,它是不再回来的;要明智地改善现在。要以不忧不惧的坚决意志投入扑朔迷离的未来。
这里,首先创建了一个对象,并把它保存在变量 person 中。然后,给这个对象添加了一个名为name 的属性,并给这个属性赋值了一个字符串”Nicholas”。在此之后,就可以访问这个新属性,直到
对象被销毁或属性被显式地删除。2.复制值
除了存储方式不同,原始值和引用值在通过变量复制时也有所不同。在通过变量把一个原始值赋值
到另一个变量时,原始值会被复制到新变量的位置。这里,num1 包含数值 5。当把 num2 初始化为 num1 时,num2 也会得到数值 5。这个值跟存储在
num1 中的 5 的,因为它是那个值的副本。这两个变量可以独立使用,互不干扰。这个过程如图
在把从一个变量赋给另一个变量时,存储在变量中的值也会被复制到新变量所在的位置。。操作完成后,两个变量实际
上指向同一个对象,因此一个对象上面的变化会在另一个对象上反映出来,
3.传递参数
。这意味着函数外的值会被复制到函数内部的参数
中,就像从一个变量复制到另一个变量一样。。对很多开发者来说,这一块可能会不好理解,毕竟变量有按
值和按引用访问,而传参则只有按值传递。
即一个命名参数,或者用 ECMAScript 的话说,
就是 arguments 对象中的一个槽位)。在按引用传递参数时,值在内存中的位置会被保存在一个局部变
量,这意味着对本地变量的修改会反映到函数外部。(这在 ECMAScript 中是不可能的。)
这一次,我们创建了一个中。然后,这个对象被传给 setName()
方法,并被复制到参数 obj 中。在函数内部,obj 和 person 都指向同一个对象。结果就是,即使对象
是按值传进函数的,obj 也会通过引用访问对象。。
为证明对象是按值传递的,我们再来看看下面这个修改后的例子:
如果变量是给定引用类型的实例,则 instanceof 操作
符返回 true。来看下面的例子:
按照定义,所有引用值都是 Object 的实例,因此通过 instanceof 操作符检测任何引用值和
Object 构造函数都会返回 true。类似地,如果用 instanceof 检测原始值,则始终会返回 false,
因为原始值不是对象。注意 typeof 操作符在用于检测函数时也会返回”function”。当在 Safari(直到 Safari 5) 和 Chrome(直到 Chrome 7)中用于检测正则表达式时,由于实现细节的原因,typeof
也会返回”function”。ECMA-262 规定,。因为上述浏览器中的正则表达式实现了这个方法,所
以 typeof 对正则表达式也返回”function”。
二、执行上下文与作用域
- 的概念在 JavaScript 中是颇为重要的。变量或函数的上下文。每个上下文都有一个关联的变量对象(variable object),
而这个上下文中定义的所有变量和函数都存在于这个对象上。虽然无法通过代码访问变量对象,但后台
处理数据会用到它。- 。根据 ECMAScript 实现的宿主环境,表示全局上下文的对象可能不一
样。在浏览器中,,。使用 和 的顶级声明不会定义在全局上下文中,但在作用域链解析上效果是一样的。。- 。
代码执行时的标识符解析是通过沿的。搜索过程始终从作用域链
的最前端开始,然后逐级往后,直到找到标识符。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!