一、基本类型和引用类型的值
Javascript变量由于不存在定义某个变量必须要保存何种数据类型值的规则,变量的值及其数据类型可以在脚本的生命周期内改变。
Undefined、Null、Boolean、Number和String是基本数据类型。
访问变量有按值和按引用两种方式,但参数只能按值传递。
function setName(obj){
obj.name = "Nicholas";
obj = new Object();
obj.name = "Greg";
}
var person = new Object();
setName(person);
alert(person.name); //"Nicholas"
typeof操作符是确定一个变量是字符串、数值、布尔值,还是undefined的最佳工具。
变量的值是一个对象或null,则typeof操作符返回"object"。
instantceof操作符检测引用类型值。当然使用instanceof操作符检测基本类型的值,则该操作符始终返回false,因为基本类型不是对象。
二、执行环境及作用域
每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中。虽然我们编写的代码无法访问这个对象,但解析器在处理数据时会在后台使用它。
延长作用域链:try-catch语句的catch块、with语句。(注:这两个语句都会在作用域链的前端添加一个变量对象)
JavaScript没有块级作用域:
eg1:
if(true){
var color = "blue";
}
alert(color); //"blue"
在JavaScript中,if语句中的变量声明会将变量添加到当前的执行环境。
eg2:
for(var i = 0; i<10; i++){
...
}
alert(i);//10
对于JavaScript中,由于for语句创建的变量 i 即使在for循环执行结束后,也依旧会存在于循环外部的执行环境中。
在初始化变量时没有使用var声明,该变量会自动被添加到全局环境。
function add(num1,num2){
sum = num1 + num2;
return sum;
}
var result = add(10,20); //30
alert(sum); //30