这个标题念起来有点拗口,但却是理解数据结构的关键。标题中的4个术语,对应的英文分别是:shallow copy(注意,不是shadow copy)、deep copy、pass by value、pass by reference(或pass by address)。传址和传引用是一回事。

一门编程语言的核心是数据结构,粗略来讲,可以把数据结构分成不可变类型(immutable)和可变类型(mutable)。为什么这么分呢?这涉及到内存分配问题。对于不可变类型,只要分配有限的内存空间即可,而对于可变类型,理论上则要分配没有大小限制的空间。因此,这么分是出于合理利用系统资源的考虑。实际上,栈内存和堆内存分别用于保存不可变类型值和可变类型值。

什么是不可变类型?就是该值一旦赋予某个变量,就只属于某个变量,不能同属于其他变量。如:


var stringValue = "I'm immutable data structure, mean you can't modify me!";
var anotherStringValue = stringValue;
stringValue = "I have changed";

此时,anotherStringValue中保存的值会不会也变成“I have changed”?不会。因为


var anotherStringValue = stringValue;

照stringValue中保存的字符串的原样,复制一个字符串(相应地,在内存中分配一块新空间),并将该字符串赋给anotherStringValue。换句话说,这两个变量虽然保存的值相同,但它们的值并不在一块内存中。因此,修改任何一个变量,都不会影响另一个变量。即


stringValue = "I have changed";

只会影响stringValue的值。但是,确切来讲,stringValue = “I have changed”;并不是修改stringValue,而是创建了一个新字符串(相应地,在内存中分配一块新空间),然后让stringValue引用该字符串——更像是替换变量的值;原来的字符串呢?因为没有变量引用它,也就成为垃圾了(当然,垃圾所占用的内存会被回收)。 查看全文 »

提起Deamweaver和JavaScript,就会让人情不自禁地想起MM_swapImage——早期在Deamweaver中实现鼠标翻转图(swapImage)的“经典”JavaScript函数名。而且,在Deamweaver创建的网页中,到处可见各种类似的JavaScript函数。

不过,Deamweaver也在不断进化。Adobe显然不想反对不唐突的JavaScript。Deamweaver CS4已经支持这种现代的JavaScript编程理念,它的改进围绕将JavaScript代码外部化(external)展开。

首先,Deamweaver CS4在每个HTML文件相关工具条中,会为引用的每个外部文件(包括JavaScript、CSS及第三方域文件)添加一个按钮。点击按钮即可编辑相应外部文件(当然,第三方域中的文件无法编辑)。

其次,在“实时视图”(Live View)中,Deamweaver CS4嵌入了Webkit——Safari和Chrome浏览器的引擎——窗口,通过点击上述按钮,即可切换到相应外部文件,不会打断当前的“实时视图”。打开外部文件后,用户所做修改也会立即呈现在“实时视图”中,不必先保存JavaScript文件。

再次,“实时视图”包含“实时代码”模式,在这种模式下查看HTML代码,能看到“经过计算的源代码”。换句话说,“实时代码”模式显示的是当前页面的DOM结构。用户在“实时视图”中与页面交互导致的DOM变化,都会反映在“实时代码”中。有点类似Firebug啊。此外,在“实时代码”模式下,还可以“冻结”JavaScript,以便检查当前状态下的DOM层次。

Deamweaver CS4提供的JavaScript编辑器具有语法检查和代码提示功能。语法检查会在用户输入代码的同时提供即时反馈,告知用户可能存在的语法问题。代码提示可以根据页面引用中的所有JavaScript文件,向用户提示相关函数和对象;这意味着,代码提示适用于所有JavaScript库。不过,代码提示不适用于远程文件,如果要使用代码提示,必须将文件保存在本地。

最后,Deamweaver CS4还新增了一个“外部化JavaScript”(Externalize JavaScript)命令。这个命令可以把嵌入script标签中的代码,转移到外部JavaScript文件中,然后再为HTML文件添加一个新script标签(以引用新外部文件)。此外,这个命令还支持清理嵌入的JavaScript处理程序,例如onclick属性。不过,生成的不唐突版本有赖于Adobe自己的Spry JavaScript框架。虽然没有为使用别家框架提供选择,但也体现了Deamweaver CS4在支持不唐突JavaScript方面所作的努力。

原文链接