有关javascript的一些笔记

js的执行顺序与预编译:

按上到下按块执行,块就是一个<script></script>块, javascript引擎解析脚本时,遇到一个<script></script>块,先对这个块里的所有声明的变量与函数预编译处理,即:在这个块内任何位置声明的所有变量和函数,在这个块内任何位置都是可见的.

 <script>
alert(aa); //undefined
var aa = 3;
alert(aa); //3
fun1(); //"fun1()"
function fun1() { alert("fun1()"); };
// fun2(); // 此处会报错,未找到对象
var fun2 = function () { alert("fun2()"); };
fun2(); //"fun2()"
// alert(dd); 此处报错,dd未定义

</script>
<script>
var dd = 3;
alert(aa);// 3
</script>

预编译只是表示变量已经存在,还不知道变量的值是多少,变量的初始化要等在执行期,所以行一第显示undefined.fun2()会报错,是因为变量fun2只是一个声明变量,还没有初始化.

下面的块可以使用上面块中声明的变量,但上面块不能使用下面块声明的变量,因为预编译是按块来解析的,不是整个html文档.

参考:http://hi.baidu.com/xiaokai888/blog/item/9532796321cf56750d33fa58.html

JavaScript函数都有作用域。作用域是JavaScript语言中最晦涩的技术难题。所有面向对象语言都有作用域这个概念,但是在JavaScript中,只有函数有作用域,而对于if、for、while、switch等块结构是没有作用域的。例如,在下面示例中if条件结构没有作用域概念,所以它包含的变量声明依然是全局变量。

var a = 1;  
if(true){
// 没有作用域
var a = 2;
}
alert(a);
// 返回值为2,而不是1,因为两次声明都在同一个全局域中
(function(){ // 有作用域
var a = 3;
})();
alert(a);
// 返回值为2,而不是3,因为函数体的变量声明属于局部作用域,
而不是全局作用域


字符串只能在一行内显示,要换行用换行符\n,'字符串\n字面量'

字体串字面量,即字符串常量。

表示字符串时,双引号中可包含单引号,单引号中不能包含双引号。"字符'串'常量"



 



posted @ 2012-02-20 14:32  pantherbean  阅读(175)  评论(0编辑  收藏  举报