Javascript是无类型的,这就意味着它的变量可以存放任何类型的值。必要时可以快速,自动的转换类型。
变量声明用var,一个var可以声明多个变量,用逗号隔开,也可以将变量声明和变量初始化绑定在一起。
重复的声明和遗漏的声明:var多次声明同一变量是合法的。尝试读一个未声明的变量的值,会生成一个错误,若给一价目未用var声明的变量赋值,javascript会隐式声明该变量,但是隐式声明的变量总是被创建为全局变量。所以无论是全局还是局部变量最好都用var语句创建。如:
scope = "global"; //声明一个全局变量
function checkscope( ) {
scope = "local"; // 改变了全局变量
document.write(scope); // 使用的是全局变量
myscope = "local"; // 隐式声明新的全局变量
document.write(myscope); // 使用新的全局变量
}
checkscope( ); // 输出"locallocal"
document.write(scope); // 输出"local"
document.write(myscope); // 输出"local"
函数定义可以嵌套
没有块级作用域
未定义的变量和未赋值的变量:读未声明的变量会产生错误,读已声明但未被赋值的变量,将得到一个默认值undefined.
基本类型和引用类型:数值,布尔值,null和未定义的值属于基本类型,对象,数组和函数属于引用类型。
无用存储单元的收集:它是自动进行的,是不可见的。如:
var s = "hello"; // 为一个字符串分配内存空间
var u = s.toUpperCase( ); // 创建一个新的字符串
s = u; // 覆盖对原始字符串的引用
作为属性的变量:变量基本上和对象的属性是一样的。
全局对象:当Javascript的解释器开始运行时,首先创建一个全局对象,这个对象的属性就是程序中的全局变量。
局部变量:调用对象。在执行一个函数时,函数的参数和局部变量是作为调用对象的属性而存储的。
Javascript的执行环境:
深入理解变量作用域:下图是作用域链和变量解析
变量声明用var,一个var可以声明多个变量,用逗号隔开,也可以将变量声明和变量初始化绑定在一起。
重复的声明和遗漏的声明:var多次声明同一变量是合法的。尝试读一个未声明的变量的值,会生成一个错误,若给一价目未用var声明的变量赋值,javascript会隐式声明该变量,但是隐式声明的变量总是被创建为全局变量。所以无论是全局还是局部变量最好都用var语句创建。如:
scope = "global"; //声明一个全局变量
function checkscope( ) {
scope = "local"; // 改变了全局变量
document.write(scope); // 使用的是全局变量
myscope = "local"; // 隐式声明新的全局变量
document.write(myscope); // 使用新的全局变量
}
checkscope( ); // 输出"locallocal"
document.write(scope); // 输出"local"
document.write(myscope); // 输出"local"
函数定义可以嵌套
没有块级作用域
未定义的变量和未赋值的变量:读未声明的变量会产生错误,读已声明但未被赋值的变量,将得到一个默认值undefined.
基本类型和引用类型:数值,布尔值,null和未定义的值属于基本类型,对象,数组和函数属于引用类型。
无用存储单元的收集:它是自动进行的,是不可见的。如:
var s = "hello"; // 为一个字符串分配内存空间
var u = s.toUpperCase( ); // 创建一个新的字符串
s = u; // 覆盖对原始字符串的引用
作为属性的变量:变量基本上和对象的属性是一样的。
全局对象:当Javascript的解释器开始运行时,首先创建一个全局对象,这个对象的属性就是程序中的全局变量。
局部变量:调用对象。在执行一个函数时,函数的参数和局部变量是作为调用对象的属性而存储的。
Javascript的执行环境:
深入理解变量作用域:下图是作用域链和变量解析
