javascript 阅读笔记

1. 未用var显示的声明时,创建的变量是全局的。

2. 没有块级作用域。
   在函数中声明的变量,无论是在什么位置声明的,在整个函数中,他们都是有定义的。这一点和java等不同。这里是没有块级作用域的。
  详细代码参照P76

3.javascript解释器开始执行的时候,会自动创建全局对象。在顶层代码(即函数之外)中,可以通过this关键字引用。

4. JavaScript中最容易使人迷惑的恐怕就数this指针了,this指针在传统OO语言中,是在类中声明的,表示对象本身,而在JavaScript中,this表示当前上下文,即调用者的引用。

   应该注意的是,this的值并非函数如何被声明而确定,而是被函数如何被调用而确定,这一点与传统的面向对象语言截然不同


5. JavaScript的作用域为词法作用域, 所谓词法作用域是说,其作用域为在定义时(词法分析时)就确定下来的,而并非在执行时确定.

<strong>var str = "global";
function scopeTest(){
    print(str);
    var str = "local";
    print(str);
}

scopeTest();</strong>

与下边的区别

<strong>var str = "global";
function scopeTest(){
    print(str);
}

scopeTest();</strong>


6.  引用是一个比较有意思的主题, 跟其他的语言不同的是, JavaScript 中的引用始终指向最终的对象,而并非引用本身
<strong>var obj = {}; // 空对象
var ref = obj; // 引用
 
obj. name = "objectA" ;
print ( ref . name ); //ref 跟着添加了 name 属性
 
[color=red]obj = [ "one" , "two" , "three" ]; //obj 指向了另一个对象 ( 数组对象 )
print ( ref . name ); //ref 还指向原来的对象[/color]
print (obj. length ); //3
print ( ref . length ); //undefined</strong>



obj 只是对一个匿名对象的引用,所以, ref 并非指向它,当 obj 指向另一个数组对象时
可以看到,引用 ref 并未改变,而始终指向这那个后来添加了 name 属性的 " 空 " 对象 ”{}” 。

你可能感兴趣的:(JavaScript)