当前位置:编程学习 > JAVA >>

JavaScript—之对象参数的引用传递

1.JavaScript hoisting
 
 
 
>>请看例子,我们拿Chrome的console作为JS的运行环境。
 
 
 
上面直接执行console.log(a), 不带一点悬念地抛出了not defined 错误。这是预料之中的。
 
看下面进化后的代码:
 
 
 
之前变量没有定义的错误没了,取而代之的是告诉我们a的值是 'undefined'。先不管a的值缘何为 'undefined' 了,至少可以知道现a这个变量是定义了,因为之前报的' a is not defined'的错误没有了。
 
这正是因为JavaScript 中的一个声明提前的特性起的作用。
 
JavaScript中可以提前使用在后面语句中声明的变量,这种特性叫被国外某网友(ben cherry)称为Hoisting (非官方术语) 。 可以理解为将变量的声明提前了,所以在变量声明前使用变量不会报错。而且这一特性不仅限于变量名,对于函数的声明也是同样的效果。
 
 
第一次对函数foo()的调用同样报 'not defined' 错误。这是合情合理同时是合法的。因为从头到尾就没有定义这么一个叫作foo() 的东西。
 
之后将函数调用写在最前面,但函数的定义我们写在了之后。
 
 
 
>> 再来看上面对a的输出值为'undefined'的问题。
 
 
 
这里需要深入理解Hoisting这一特性。它的提前只是将声明提前,而对变量的赋值并没有跟着提前。这点很关键。也就是为什么我们可以在第一句使用变量a但它的值却是 'undefined'。 JavaScript里面声明了但还未赋值的变量其值默认便是 'undefined'。
 
 
 
按照Hoisting来解释,最终生成的等价代码其实差不多应该就是这样的:
 
 
 
 
 
2.直接对字符串字面量调用其方法
 
 
 
可以直接对字符串字面量调用方法,JS解析器会自动把字符串变量转为一个字符串类型暂存,然后调用字符串上的方法,完了之后再将暂存的字符串类型销毁。
 
所以你会看到下面这种用法。
 
 
我们可以理解为解析器在后台声明了一个变量暂存这个字符串然后再调用的length方法。
 
 
 
补充:web前端 , JavaScript ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,