一、变量作用域
JavaScript变量按数据类型分:字符串(String),数值(Number),布尔值(boolean)。按作用域分:全局变量和局部变量
全局变量:最外层定义、未定义直接赋值、this的变量
x = 1; //x是全局变量
y = function(){ //y是全局变量
z = 2; //y是全局变量
this.o = 3; //o是全局变量
}
局部变量:用var定义的变量。声明在函数内部的变量则具有局部作用域,在函数的外部是不能直接访问的。
var x = 1; //x是局部变量
举例(1):
if (!("a" in window)){var a = 1;}
alert(a);
结果:跳出“undefined”框,预编译:global_object={a:undefined,}执行:activation_object={a:undefined,alert:undefined,}
举例(2):
var a = 12;
function a(x){return x*2;}
alert(a);
结果:跳出“function a(x){var x = 12;}”框,变量a被2次赋值。
举例(3):
function a(o,p,q){argument[2]=10;alert(q);}
a(1,2);
结果:跳出“undefined”框,形参q没有被赋值。
举例(4):
function a(){
var x=12;
y=13;
}
alert(y); //13
alert(x); //脚本错误
结果:第一次跳出“13”框,第二次出错
举例(5):
function add(num1,num2){var sum = num1+num2;}
var total = add(5,10);
作用域链如下:
![](https://img-my.csdn.net/uploads/201206/19/1340074838_4473.jpg)
二、JavaScript对象
1.创建对象:
var x = {var m=1;var n=2}; //直接创建对象x
var x.m = 1;var x.n = 2; //对属性和方法赋值创建对象
function y(m,n){this.m=m;this.n=n;} var x = new y(1,2); //创建构造函数,实例对象。
举例(1):
1、创建一个对象(有constructor属性及[[Prototype]]属性),根据ECMA,其中[[Prototype]]属性不可见、不可枚举
2、创建一个函数(有name、prototype属性),再通过prototype属性引用刚才创建的对象
3、创建变量A,同时把函数的引用赋值给变量A
2.对象的属性和方法
对象的属性和方法支持4种不同的类型:
private property(私有属性),
dynamic public property(动态公有属性),
static public property/prototype property(静态公有属性或原型属性),static property(静态属性或类属性)。
举例(1):
function myclass(){
var x = 1; //私有属性
var this.z = 2; //动态公有属性
}
myclass.prototype.y = 3; //静态公有属性
myclass.o = 4; //静态属性
var a = new myClass();
alert(a.x); //undefined
alert(a.z); //2
alert(a.y); //3
alert(a.o); //undefined
alert(myclass.o); //4